侦听已为 JTable 选择的单元格的选择

Listen for selection on already selected cell for JTable

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


我有一个带有行和列侦听器的 JTable。当 selecting 一个已经 selected 的单元格时,两个监听器都不会触发:

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());
};

我的目标是切换单元格 on/off。它有效,除了在 selecting 一个已经 selected 的单元格时听众不会触发,这是通过上面的 SSCCE 表示的。

似乎没有任何我可以附加到 JTable(或它的 models/selection 模型)的侦听器来处理这个问题,除非我使用 MouseListener 和手动管理坐标。使用 TableModelListener,我可以侦听更改,但此事件针对的是前一个单元格(已被删除select),并单击没有 select 的区域单元格会导致该侦听器触发。

My goal was to switch cells on/off.

在 TableModel 中存储布尔数据。然后,每当您单击该单元格时,该值将在 true/false.

之间切换

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