在已选择的单元上监听JTable的选择

问题描述:

即使在已选择的单元格上使用JTable(除了使用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表示的。

除非我使用MouseListener并手动管理cooridnates,似乎没有任何听众可以附加到JTable(或其型号/选择模型)来处理此问题。使用TableModelListener,我可以侦听更改,但此事件针对先前的单元格(已被取消选择),并且单击不选择单元格的区域会导致该侦听器触发。

我的目标是打开/关闭单元格。

将布尔数据存储在TableModel中。然后,无论何时单击单元格,该值都将在真/假之间切换。

布尔值的默认渲染器是复选框。如果您不想查看复选框,则可以随时使用自定义渲染器。