因此,我希望只能在JTree中选择叶子。在线上有一些解决方案,但是它们不能用于多个选择...

我想要的是找到当用户单击节点时触发的代码部分,并修改该部分以满足我的需要。

我在DefaultTreeCellEditor中找到了一个侦听器,但是该代码似乎适用于一次仅选择一个节点的情况...

最重要的是,在哪里可以找到当单击节点时决定是否选择它,以及是否取消选择所有其他选定节点的代码?

最佳答案

固定它!

public class LeafOnlyTreeSelectionModel extends DefaultTreeSelectionModel
{
private static final long serialVersionUID = 1L;

private TreePath[] augmentPaths(TreePath[] pPaths)
{
    ArrayList<TreePath> paths = new ArrayList<TreePath>();

    for (int i = 0; i < pPaths.length; i++)
    {
        if (((DefaultMutableTreeNode) pPaths[i].getLastPathComponent()).isLeaf())
        {
            paths.add(pPaths[i]);
        }
    }

    return paths.toArray(pPaths);
}

@Override
public void setSelectionPaths(TreePath[] pPaths)
{
    super.setSelectionPaths(augmentPaths(pPaths));
}

@Override
public void addSelectionPaths(TreePath[] pPaths)
{
    super.addSelectionPaths(augmentPaths(pPaths));
}


}

09-11 17:19