JTable单元监听器?

时间:2012-09-11 19:46:22

标签: java swing jtable listselectionlistener

我正在使用JTable。我需要在一个单元格时收到通知 选择变化。我尝试使用ListSelectionListener但是 我只在行选择改变时收到通知。如果我选择一个 在同一行的新列,我没有得到通知。我需要知道什么时候 选择单元格,而不是单元格更改时。有没有一个我可以用来做这个的听众?

2 个答案:

答案 0 :(得分:11)

最简单的方法是调用setCellSelectionEnabled(true),并将对表的引用传递给侦听器。调用侦听器时,请在原始表上调用getSelectedRow()getSelectedColumn()

另一种方法是在表上设置行选择侦听器,在ColumnModel上设置列选择侦听器,然后找出它们的交集。

答案 1 :(得分:5)

接收选择更改通知的一种方法 - 正如@parsifal已经回答的那样(在评论中)是获取TableColumnModel的内部selectionModel并注册一个监听器:

table.getColumnModel().getSelectionModel().addListSelectionListener(selectionListener);

另一种方法是使用columnModel注册TableColumnModelListener:

table.getColumnModel().addColumnModelListener(columnModelListener);

第一个是"更短"在代码方面:只有一种方法可以实现与几种方法相比 - 除了columnSelectionChanged之外,大多数都是空的。

第二个对动态变化更强大:第一个没有可能防止columnModel的selectionModel属性的更改...因为它不是属性。或者换句话说:在(很少见)应用程序代码交换了selectionModel的情况下,监听器正在监听Void。安装columnModelListener不受此类更改的影响,因为columnModel会从其selectionModel传递事件,无论它是什么。