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

Rom*_*dgz 5 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();
            }
        });
Run Code Online (Sandbox Code Playgroud)

unselect按钮似乎正在工作,但select all只扩展了JTree并选择了最后一个节点.我认为每次以编程方式选择节点时,我都会取消选择前一个节点.

JTree的配置如下:

curvesTree = new JTree(rootNode);
curvesTree.setExpandsSelectedPaths(true);
curvesTree.getSelectionModel().setSelectionMode(TreeSelectionModel.
                  DISCONTIGUOUS_TREE_SELECTION);
Run Code Online (Sandbox Code Playgroud)

kle*_*tra 6

取消选择是因为您正在设置新的选择路径而不是添加.在扩展后的循环中,而不是

 curvesTree.addSelectionPath(...)
Run Code Online (Sandbox Code Playgroud)

编辑

阅读api总是很有启发性,即使经过多年;-)刚刚发现了一个更简单的方法,它将所有工作留给了树:

tree.setSelectionInterval(0, tree.getRowCount());
Run Code Online (Sandbox Code Playgroud)