我有一个 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/