【问题标题】:Refresh JTable when setAutoCreateRowSorter is true当 setAutoCreateRowSorter 为 true 时刷新 JTable
【发布时间】:2012-02-22 10:16:40
【问题描述】:

我已经写了一个默认的表格渲染如下:

public class CustTableRenderer 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);
        try {

            Object cellObj = table.getModel().getValueAt(row, 7); 
            double cellValue = (Double) cellObj;

            if (cellValue < 0) {
                comp.setBackground(new Color(255, 48, 48));
            } else if (cellValue == 0) {
                comp.setBackground(new Color(173, 255, 47));
            } else {
                comp.setBackground(Color.white);
            }

            if (isSelected) {
                comp.setBackground(new Color(71, 60, 139));
                TableModel model = table.getModel();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return comp;
    }
}

为了突出显示包含第 7 列负值的行,我还将setAutoCreateRowSorter 设置为true。我的问题是当我单击标题以根据它进行排序时,表格已排序但突出显示的行没有更改,因此突出显示了错误的行。

排序后如何重绘表格?

【问题讨论】:

  • 给表格附加一个docs.oracle.com/javase/6/docs/api/javax/swing/event/…,在delegate方法中,调用表格的doLayout。
  • @govi - 不,从不需要手动 doLayout。如果这似乎可以解决问题,那么其他地方确实有问题
  • @kleopatra - 嗯。是的,没错。

标签: java swing jtable tablerowsorter


【解决方案1】:

传入渲染器的坐标在视图坐标系中,您必须在访问模型之前将它们转换为模型坐标:

  int modelRow = table.convertRowIndexToModel(row);
  int modelColumn = table.convertColumnIndexToModel(column);
  cellObject = table.getModel().getValueAt(modelRow, modelColumn);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-04
    • 2015-09-06
    • 2011-12-05
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多