【问题标题】:Listen for selection on already selected cell for JTable侦听 JTable 已选择单元格上的选择
【发布时间】: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


    【解决方案1】:

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

    在 TableModel 中存储布尔数据。然后,每当您单击单元格时,该值都会在真/假之间切换。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-16
      • 1970-01-01
      • 2018-02-28
      相关资源
      最近更新 更多