我正在尝试使用rowsorter对表进行排序。
RowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
cTable.setRowSorter(sorter);
我正在使用扩展DefaultTableCellRenderer的渲染器。我正在使用渲染器根据其值以某种颜色绘制单元格的内容。
cTable.setDefaultRenderer(Object.class,new <renderer name>());
例如:
public Component getTableCellRendererComponent(JTable table, Object v,
boolean isSelected, boolean hasFocus, int row, int column)
{
super.getTableCellRendererComponent(table, v, isSelected, hasFocus,
row, column);
int k=table.getValueAt(row,column);
if (k >= 0) this.setForeground(Color.red);
}
注意:这只是一个示例代码。没有真正的功能。 当我排序时,排序发生得很好,但是渲染器没有改变颜色的功能。有没有人提前遇到过这个问题?请帮忙
答案 0 :(得分:4)
您需要将渲染器中的逻辑扩展为:
if (isSelected) {
this.setForeground(table.getSelectionForeground());
} else if (k >= 0) {
this.setForeground(Color.red);
} else {
this.setForeground(table.getForegroundColor());
}
您可能还希望根据每种情况设置背景颜色。这样做的原因是因为DefaultTableCellRenderer
就像一个“橡皮图章”,依次应用于每个细胞。例如,如果第5行第1列的单元格的值> k> = 0,那么您将前景色切换为此单元格和所有后续单元格的 。因此,如果您的检查失败,明确将其设置为“正常”前景色非常重要。