tad*_*ole 12 java swing jtable listselectionlistener
我正在使用JTable.我需要在细胞选择改变时收到通知.我尝试使用ListSelectionListener但我只在行选择更改时才收到通知.如果我在同一行上选择一个新列,我就不会收到通知.我需要知道何时选择单元格,而不是更改单元格时.有没有我可以用来做这个的听众?
小智 11
最简单的方法是调用setCellSelectionEnabled(true)
并将对表的引用传递给侦听器.调用侦听器时,调用getSelectedRow()
并getSelectedColumn()
在原始表上调用.
另一种方法是在表上设置一个行选择监听器,在其上设置一个列选择监听器ColumnModel
,然后找出它们的交集.
接收列选择更改通知的一种方法- 正如@parsifal已经回答的那样(在注释中)是获取TableColumnModel的内部selectionModel并注册一个监听器:
table.getColumnModel().getSelectionModel().addListSelectionListener(selectionListener);
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用columnModel注册TableColumnModelListener:
table.getColumnModel().addColumnModelListener(columnModelListener);
Run Code Online (Sandbox Code Playgroud)
第一个是代码方面的"更短":只有一种方法可以实现而不是几种方法 - 除了columnSelectionChanged之外,大多数是空的.
第二个对动态变化更强大:第一个没有可能防止columnModel的selectionModel属性的更改...因为它不是属性.或者换句话说:在(很少见)应用程序代码交换了selectionModel的情况下,监听器正在监听Void.安装columnModelListener不受此类更改的影响,因为columnModel会从其selectionModel传递事件,无论它是什么.