JTable可点击列排序:排序对单元格内容进行排序,但不更新单元格格式?

我有一个可排序的JTable设置为使用AbstractTableModel的自定义扩展。 但是,这个表的某些行为是我所期望的,我想知道如何解决这个问题。

我将JTable设置为可排序使用:

 thisJTable.setAutoCreateRowSorter(true); 

这允许我按预期单击列标题对表进行排序。

但是,我发现当我通过单击列标题对表进行排序时,我的行的格式(背景和前景色)也没有排序。

我根据它们包含的值设置了这些行的颜色编码。 当我按列标题排序时,给定行NUMBER的格式保持不变(尽管之前在该行中的内容已移动)。

通过覆盖JTable的默认prepareRenderer调用来设置行的颜色:

 thisTable = new JTable(thisModel){ //Set up custom rendering - Sets background color of row to correct value public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { Component c = super.prepareRenderer(renderer, row, column); CustTableModel thisModel = (CustTableModel) getModel(); c.setBackground(thisModel.getRowBackgroundColor(row)); c.setForeground(thisModel.getRowForeColor(row)); return c; } }; 

有没有更好/不同的方法来解决这个问题?

我应该使用不同的方法来进行渲染吗?这种方法会更新某种类型的JTable渲染吗?

或者我是否想要编写自己的排序方法?

解决方案(谢谢mKorbel!)

我想我会发布我的解决方案,因为我不得不玩这个,因为我不确定新索引是否也会传递给prepareRenderer。

  thisTable = new JTable(thisModel){ //Set up custom rendering - Sets background color of row to correct value public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { int viewIdx = row; int modelIdx = convertRowIndexToModel(viewIdx); Component c = super.prepareRenderer(renderer, row, column); CustTableModel thisModel = (CustTableModel) getModel(); c.setBackground(thisModel.getRowBackgroundColor(modelIdx)); c.setForeground(thisModel.getRowForeColor(modelIdx)); return c; } }; 

您必须将行索引从View转换为模型

 int modelRow = convertRowIndexToModel(row); 

您可以使用此表单击标题来启用表排序table.setAutoCreateRowSorter(true);

欲了解更多信息,请访问该网站http://www.codejava.net/java-se/swing/6-techniques-for-sorting-jtable-you-should-know