在JTable的已选定单元格上进行选择

时间:2015-09-27 01:11:34

标签: java swing jtable cell listselectionlistener

除了使用JTable之外,即使在已选择MouseListener的单元格上,是否有任何方法可以监听小区选择?

我有一个带行和列监听器的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并手动管理cooridnates 。使用TableModelListener,我可以监听更改,但此事件的目标是前一个单元格(已取消选择),单击未选择单元格的区域将导致该侦听器触发。

1 个答案:

答案 0 :(得分:2)

  

我的目标是打开/关闭电池。

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

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