java - 排序后重新为 JTable 着色

标签 java swing repaint

我有一个 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/

相关文章:

java - 需要查找特定角色的所有用户 JPA Criteria API

java - 字符串应该位于 JTable 单元格的中间,而不是左边

java - 使用 repaint() 进行奇怪的重新定位;

java - JPanel 重绘未清除

java - Spring 启动 : Not able to hit the url

java - 如何重定向库的 Sys.err?

java - spring-amqp 请求/回复消息传递的空响应

java - 在 JFrame 中显示图像

Java Mahjong Game - 帮助实现手牌重组,将 JLabels 移离我拖动所选棋子的位置

android - AchartEngine Bar Graph Android 中Repaint 的使用方法