gpt4 book ai didi

java - 排序后重新为 JTable 着色

转载 作者:行者123 更新时间:2023-12-02 05:11:21 26 4
gpt4 key购买 nike

我有一个 JTable,每行都根据最后一列中的值着色。

但是,当我单击标题对行进行排序时,颜色不会跟随行。

我尝试在 JTable 鼠标退出事件上调用我的“colourTable”方法(我知道 Hacky) - 但没有成功。

有人能指出我正确的方向吗?

这是我的 JTable

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com