java - JTree:以编程方式选择所有节点

标签 java swing select jtree unselect

我有一个 Jtree 和 2 个用于选择和取消选择所有节点的按钮。我做了这样的尝试:

selectAll = new JButton("Select all");
selectAll.addActionListener(new ActionListener (){
        @Override
        public void actionPerformed(ActionEvent e) {
                int row = 0;
                while (row < curvesTree.getRowCount())
                {
                    curvesTree.expandRow(row);
                    row++;
                }
            int entradasTree = curvesTree.getRowCount();
            for(int i=0; i<entradasTree; i++){
                TreePath path = curvesTree.getPathForRow(i);
                curvesTree.setSelectionPath(path);
            }
        }
    });

        unselectAll = new JButton("Unselect all");
        unselectAll.addActionListener(new ActionListener (){
            @Override
            public void actionPerformed(ActionEvent e) {
                curvesTree.clearSelection();
            }
        });

取消选择按钮似乎有效,但全选仅展开 JTree 并选择最后一个节点。我想每次以编程方式选择一个节点时,我都会取消选择前一个节点。

JTree 是这样配置的:

curvesTree = new JTree(rootNode);
curvesTree.setExpandsSelectedPaths(true);
curvesTree.getSelectionModel().setSelectionMode(TreeSelectionModel.
                  DISCONTIGUOUS_TREE_SELECTION);

最佳答案

取消选择的发生是因为您正在设置新的选择路径而不是添加。在展开后的循环中,改为执行

 curvesTree.addSelectionPath(...)

编辑

阅读 api 总是有启发性的,即使在多年之后也是如此 ;-) 刚刚找到了一个更简单的方法,它将所有的工作都留给了树:

tree.setSelectionInterval(0, tree.getRowCount());

关于java - JTree:以编程方式选择所有节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7332926/

相关文章:

Java 2D 着色/填充

java - 我可以在正则表达式中声明优先于匹配项吗?

java - JTree 编辑根节点?

java - 为什么我的 JTable 是空白的

java - ClassNotFoundException : javax. annotation.Generated with JDK 11

java - 创建 mongodb 健康检查(在 dropwizard 中)

java - JTable 中 JComboBox 中的对象与组合列表中的同一对象不关联

c - 让 select 和 xcb_poll_for_event 一起工作的安全方法?

mysql - 从具有不同行数的表中选择

mysql - 我可以在单个 MySQL 命令中触发两个 select 语句并计算结果行数吗?