检测单元格单击已选择的表行

时间:2014-04-04 08:48:35

标签: java click jtable selection cell

我有一个包含 JTabel 的JFrame应用程序。底层表模型是我自己创建的类,它扩展了 AbstractTableModel 。第一列中的数据是boolean类型,因此我希望它以复选框的形式显示值。为此,我在表模型 getColumnClass 方法中添加了以下代码:

@Override
public Class<?> getColumnClass(int columnIndex) {
    if (columnIndex == 0) {
        return Boolean.class;
    } else if (columnIndex == 1) {
    ....
    ....
}

这很好用,我的表格单元格如下所示:

JTable Checkbox Columns

我现在想要的行为是,当用户点击任意行的第0列中的单元格时,我想切换 On Sale 的值。

我的主类通过实现 ListSelectionListener 并覆盖 valueChanged 方法来监听表中的选择。在 valueChanged 方法中,我可以通过调用 table.getSelectedColumn 来检查所选列,然后检查它是否为0然后在所选行中获取对象并切换布尔值出售价值。

我遇到的问题是,如果已选择某个特定行并且用户单击所选行的第0列中的单元格,则永远不会调用 valueChanged 方法,因此我永远不会切换价值。

我的问题是,如何检测单元格选择/单击已选择的行?我应该使用鼠标选择侦听器,然后使用鼠标单击事件中的位置数据确定单击的单元格吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

您是否尝试过改变表格?您需要实现TableModelListener并具有:

 public void tableChanged(TableModelEvent e) {
    int row = e.getFirstRow();
    int column = e.getColumn();
    TableModel model = (TableModel)e.getSource();
    String columnName = model.getColumnName(column);
    Object data = model.getValueAt(row, column);

    ...// Do something with the data...
}