当前位置: 首页 > 知识库问答 >
问题:

JTable cell listener?

傅阿苏
2023-03-14

我使用的是JTable。每当单元格选择发生变化时,我都需要收到通知。我试图使用ListSelectionListener,但我只在行选择更改时收到通知。如果我在同一行上选择了一个新列,我不会收到通知。我需要知道单元格何时被选中,而不是单元格何时被更改。有没有我可以用的倾听者?

共有2个答案

归鸿朗
2023-03-14

接收列选择更改通知的一种方法是获取TableColumnModel的内部selectionModel并注册一个侦听器,@parsifal(在评论中)已经回答了这一点:

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

另一种方法是向columnModel注册TableColumnModelListener:

table.getColumnModel().addColumnModelListener(columnModelListener);

第一种方法在代码方面“更短”:只需实现一种方法,而不是几个方法——除了columnSelectionChanged之外,大多数方法都是空的。

第二种方法对动态变化更具鲁棒性:第一种方法无法防止columnModel的selectionModel属性发生变化。。。因为它不是一个财产。或者换句话说:在应用程序代码替换selectionModel的情况下(相当罕见),监听器正在监听Void。安装columnModelListener不会受到这种更改的影响,因为columnModel会从其selectionModel中传递事件,无论是哪个。

赫连琦
2023-03-14

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

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

 类似资料:

相关问答

相关文章

相关阅读