侦听已为 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.
之间切换
布尔值的默认渲染器是一个复选框。如果不想看到复选框,可以随时使用自定义渲染器。
除了使用 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.
之间切换布尔值的默认渲染器是一个复选框。如果不想看到复选框,可以随时使用自定义渲染器。