在JTree中仅选择叶子

时间:2013-12-05 00:42:01

标签: java swing jtree treenode

所以我希望能够只在JTree中选择叶子。网上有一些解决方案,但它们不能用于多种选择......

我想要的是找到当用户点击节点并根据我的需要修改该部分时触发的代码部分。

我在DefaultTreeCellEditor中找到了一个监听器,但该代码似乎适用于一次只选择一个节点...

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

1 个答案:

答案 0 :(得分:1)

修正了它!

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));
}

}