我使用的是JTable。每当单元格选择发生变化时,我都需要收到通知。我试图使用ListSelectionListener,但我只在行选择更改时收到通知。如果我在同一行上选择了一个新列,我不会收到通知。我需要知道单元格何时被选中,而不是单元格何时被更改。有没有我可以用的倾听者?
接收列选择更改通知的一种方法是获取TableColumnModel的内部selectionModel并注册一个侦听器,@parsifal(在评论中)已经回答了这一点:
table.getColumnModel().getSelectionModel().addListSelectionListener(selectionListener);
另一种方法是向columnModel注册TableColumnModelListener:
table.getColumnModel().addColumnModelListener(columnModelListener);
第一种方法在代码方面“更短”:只需实现一种方法,而不是几个方法——除了columnSelectionChanged之外,大多数方法都是空的。
第二种方法对动态变化更具鲁棒性:第一种方法无法防止columnModel的selectionModel属性发生变化。。。因为它不是一个财产。或者换句话说:在应用程序代码替换selectionModel的情况下(相当罕见),监听器正在监听Void。安装columnModelListener不会受到这种更改的影响,因为columnModel会从其selectionModel中传递事件,无论是哪个。
最简单的方法是调用setCellSelectionEnabled(true)
,并将对表的引用传递给侦听器。调用侦听器时,在原始表上调用getSelectedRow()
和getSelectedColumn()
。
另一种方法是在表上设置行选择侦听器,在ColumnModel
上设置列选择侦听器,然后计算它们的交集。