12

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

4

2 回答 2

11

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

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

于 2012-09-11T20:07:08.033 回答
5

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

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

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

table.getColumnModel().addColumnModelListener(columnModelListener);

第一个是在代码方面“更短”:只有一个实现方法与几个 - 除了 columnSelectionChanged 之外,大多数是空的。

第二个对动态变化更健壮:第一个不可能防止 columnModel 的 selectionModel 属性的变化......因为它不是一个属性。或者换句话说:在应用程序代码换出 selectionModel 的(公认的罕见)情况下,侦听器正在侦听 Void。安装 columnModelListener 可以避免这种变化,因为 columnModel 会从它的 selectionModel 传递事件,无论它是什么。

于 2012-09-12T07:33:22.760 回答