【问题标题】:Deselect rows of JTable取消选择 JTable 的行
【发布时间】:2016-08-08 22:31:35
【问题描述】:

我的屏幕上有 7 张桌子。由于它们是独立的表,我可以从它们中的每一个中选择一个单元格。

虽然我希望每次在表格中选择一个单元格时,我希望从表格中取消选择先前选择单元格的单元格,并为其他表格取消选择。

基本上我想一次从一个表中选择一个单元格。

我还希望在屏幕上任意位置单击鼠标时取消选择选定的单元格。

我试过clearselection(),但它似乎不起作用。

【问题讨论】:

  • “我试过clearselection(),但它似乎不起作用。” 当然,如果使用正确,它会起作用。我们可以得出的唯一结论是代码没有正确使用它。关于那个主题.. 为了尽快获得更好的帮助,请发布 minimal reproducible exampleShort, Self Contained, Correct Example。 (包括两个表,而不是 7 个。)
  • 减少表数不符合要求
  • “减少表数不符合要求” 最终要求无关紧要。如果您只用两张表就可以做到这一点,那么使用 3、10 或 1000 应该很容易。我会指出,“未能提供 MCVE”列在两个单独的“关闭此问题”原因中。我已经添加了基于其中之一的近距离投票。因此,如果您想要解决所述问题,请下定决心,如果是,请发布 MCVE。因为如果还有 4 人同意我的评估,这个问题就会被关闭..

标签: java swing jtable


【解决方案1】:

创建TableGroup 以在一组表中强制执行SINGLE_SELECTION,每个表都有自己的ListSelectionModel。下面的示例包含一个List<JTable>,它可以管理任意数量的表的选择。

用法:

SelectionGroup group = new SelectionGroup();
group.add(new JTable(…));
group.add(new JTable(…));
…

代码:

private static class TableGroup {

    private final List<JTable> list = new ArrayList<>();

    private void add(JTable table) {
        list.add(table);
        ListSelectionModel model = table.getSelectionModel();
        model.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        model.addListSelectionListener(new ListSelectionListener() {
            @Override
            public void valueChanged(ListSelectionEvent e) {
                if (!e.getValueIsAdjusting()) {
                    for (JTable t : list) {
                        if (!t.equals(table)) {
                            t.clearSelection();
                        }
                    }
                }
            }
        });
    }
}

TableGroup 在概念上类似于ButtonGroup,见herehere

【讨论】:

  • 代码未按预期工作一旦我选择了一个表,之前选择的表就会被取消选择,但当前选择的表也会被取消选择。但我想保留当前选定表的选择。
  • 我无法重现您描述的效果;请编辑您的问题以包含一个minimal reproducible example,以显示您当前的方法。
猜你喜欢
  • 2014-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-30
  • 2023-03-24
  • 1970-01-01
  • 2015-05-30
  • 2011-05-30
相关资源
最近更新 更多