为什么JTable在changeSelection之后没有更新渲染器

时间:2014-03-09 18:53:39

标签: java swing jtable tablemodel tablecelleditor

我在Java的JTable中使用了changeSelection(int row,int column,boolean toggle,boolean extend)。我已经做到这一点,当表格有一个复选框列并且单击该列时,会发送一个事件来显示现在检查/取消选中该行,当用户完成该操作时就可以了。但是当它以编程方式完成时,事件被触发但JTable不刷新渲染器,我应该添加其他东西。它应该显示现在复选框被勾选但没有。

这是我用来以编程方式触发事件的代码。

boolean success = editCellAt(row, col); // col is a known checkbox column number
if (success) {
   changeSelection(row, col, true, false);
}

此后的内容是什么?该事件触发,但渲染器未显示现在复选框已检查是否未选中,反之亦然

1 个答案:

答案 0 :(得分:0)

表数据存储在TableModel中,这是Swing中的MVC模式到JTable,以及您需要处理的内容,因此如果您想要更新您需要fireTableCellUpdated AbstractTableModel的{​​{1}}表。

所以你可能想做这样的事情:

public class MyTableModel extends AbstractTableModel {

    //implements the needed methods.

    @Override
    public void setValueAt(Object value, int rowIndex, int columnIndex) {
        //code
        fireTableCellUpdated(rowIndex, columnIndex);
    }
}

详细了解AbstractTableModel