Java 分拣后重新给JTable上色
我有一个JTable,每一行都是根据最后一列中的值着色的 但是,当我单击标题对行进行排序时,颜色不会跟随行 我曾尝试在JTable鼠标退出事件中调用我的“colortable”方法(我知道是Hacky),但没有成功 有人能给我指出正确的方向吗 这是我的JTable 我尝试调用我们的方法的地方Java 分拣后重新给JTable上色,java,swing,repaint,Java,Swing,Repaint,我有一个JTable,每一行都是根据最后一列中的值着色的 但是,当我单击标题对行进行排序时,颜色不会跟随行 我曾尝试在JTable鼠标退出事件中调用我的“colortable”方法(我知道是Hacky),但没有成功 有人能给我指出正确的方向吗 这是我的JTable 我尝试调用我们的方法的地方 // If table headers are clicked for sorting, reset colours table.getTableHeader().addMouseListener
// 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());
}
颜色方法
// 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);
}
公共类StatusColumnCellRenderer扩展了DefaultTableCellRenderer{
@凌驾
公共组件GetTableCellRenderComponent(JTable表、对象值、,
布尔值(已选择,布尔值为焦点,整数行,整数列){
组件组件=super.getTableCellRenderComponent(表,值,
i当选、hasFocus、row、col);
//从表中获取标记值(第4列)
int mark=Integer.parseInt(table.getModel().getValueAt(第3行).toString());
红色=新颜色(200,44,44);
紫色=新颜色(163108223);
绿色=新颜色(36、135、44);
//失败
如果(标记<40){
公司挫折背景(红色较亮());
//通过
}否则如果(标记>=40){
//区别
如果(标记>=75){
公司挫折背景(紫色较亮());
}否则{
公司挫折背景(绿色较亮());
}
}否则{
公司背景(空);
}
//返回组件
返回(comp);
}
}
不要从TableModel中获取值。TableModel中的数据从不排序。只有表格视图按排序顺序显示
相反,只需从表中获取值:
int mark = Integer.parseInt(table.getValueAt(row, 3).toString());