Java 带排序的JTable渲染器

Java 带排序的JTable渲染器,java,swing,jtable,renderer,Java,Swing,Jtable,Renderer,我正在尝试使用rowsorter对表格进行排序 RowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model); cTable.setRowSorter(sorter); 注意:这只是一个示例代码,没有真正的功能。 当我排序时,排序会完美地进行,但渲染器更改颜色的功能不会发生。以前是否有人遇到过此问题?请帮助您需要将渲染器中的逻辑扩展到: if (isSelected) { this.setF

我正在尝试使用rowsorter对表格进行排序

RowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
cTable.setRowSorter(sorter);
注意:这只是一个示例代码,没有真正的功能。
当我排序时,排序会完美地进行,但渲染器更改颜色的功能不会发生。以前是否有人遇到过此问题?请帮助

您需要将渲染器中的逻辑扩展到:

if (isSelected) {
  this.setForeground(table.getSelectionForeground());
} else if (k >= 0) {
  this.setForeground(Color.red);
} else {
  this.setForeground(table.getForegroundColor());
}

您可能还希望根据每个条件设置背景色。这样做的原因是,
DefaultTableCellRenderer
就像一个“橡皮戳”,依次应用于每个单元格。例如,如果第5行第1列的单元格的值为k>=0,则您将此单元格和所有后续单元格的前景色切换为红色。因此,如果检查失败,显式将其设置回“正常”前景色非常重要。

您需要将渲染器中的逻辑扩展到:

if (isSelected) {
  this.setForeground(table.getSelectionForeground());
} else if (k >= 0) {
  this.setForeground(Color.red);
} else {
  this.setForeground(table.getForegroundColor());
}
您可能还希望根据每个条件设置背景色。这样做的原因是,
DefaultTableCellRenderer
就像一个“橡皮戳”,依次应用于每个单元格。例如,如果第5行第1列的单元格的值为k>=0,则您将此单元格和所有后续单元格的前景色切换为红色。因此,如果您的检查失败,显式将其设置回“正常”前景色非常重要

if (isSelected) {
  this.setForeground(table.getSelectionForeground());
} else if (k >= 0) {
  this.setForeground(Color.red);
} else {
  this.setForeground(table.getForegroundColor());
}