【发布时间】:2015-12-24 13:13:13
【问题描述】:
除了使用MouseListener之外,还有什么方法可以监听单元格选择,即使在已经选择的带有JTable的单元格上?
我有一个带有行和列侦听器的 JTable。选择已选择的单元格时,两个侦听器都不会触发:
JTable table() {
JTable table = new JTable(10, 10);
table.getSelectionModel().addListSelectionListener(rowListener);
table.getColumnModel().getSelectionModel().addListSelectionListener(colListener);
return table;
}
ListSelectionListener rowListener = event -> {
if(event.getValueIsAdjusting())
return;
System.out.println("Row: "+((ListSelectionModel) event.getSource()).getMinSelectionIndex());
};
ListSelectionListener colListener = event -> {
if(event.getValueIsAdjusting())
return;
System.out.println("Col: "+((ListSelectionModel) event.getSource()).getMinSelectionIndex());
};
我的目标是打开/关闭单元格。除了在选择已选择的单元格时侦听器不会触发这一事实(通过上面的 SSCCE 表示)之外,它可以正常工作。
似乎没有任何监听器可以附加到JTable(或者它的模型/选择模型)来处理这个问题,除非我要使用MouseListener 并手动管理坐标。使用TableModelListener,我可以侦听更改,但此事件针对的是前一个单元格(已取消选择),单击未选择单元格的区域会导致该侦听器触发。
【问题讨论】:
标签: java swing jtable cell listselectionlistener