我有一个 JTable,每行都根据最后一列中的值着色。
但是,当我单击标题对行进行排序时,颜色不会跟随行。
我尝试在 JTable 鼠标退出事件上调用我的“colourTable”方法(我知道 Hacky) - 但没有成功。
有人能指出我正确的方向吗?
这是我的 JTable
我尝试调用 reColour 方法的位置
// If table headers are clicked for sorting, reset colours
table.getTableHeader().addMouseListener(new java.awt.event.MouseAdapter() {
@Override
public void mouseExited(java.awt.event.MouseEvent evt) {
Functions.colourTable(model, table);
}
});
颜色方法
static void colourTable(TableModel model, JTable table) {
table.setDefaultRenderer(Object.class, new StatusColumnCellRenderer());
}
列单元格渲染器类
public class StatusColumnCellRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int col) {
Component comp = super.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, col);
// Get the mark value from the table (col 4)
int mark = Integer.parseInt(table.getModel().getValueAt(row, 3).toString());
Color red = new Color(200, 44, 44);
Color purple = new Color(163, 108, 223);
Color green = new Color(36, 135, 44);
// Fail
if (mark < 40) {
comp.setBackground(red.brighter());
// Pass
} else if (mark >= 40) {
// Distinction
if (mark >= 75) {
comp.setBackground(purple.brighter());
} else {
comp.setBackground(green.brighter());
}
} else {
comp.setBackground(null);
}
// Return the component
return (comp);
}
}
最佳答案
int mark = Integer.parseInt(table.getModel().getValueAt(row, 3).toString());
不要从 TableModel 获取值。 TableModel 中的数据永远不会排序。仅 TableView 按排序顺序显示。
只需从表中获取值即可:
int mark = Integer.parseInt(table.getValueAt(row, 3).toString());
关于java - 排序后重新为 JTable 着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27320251/