因此,我希望只能在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));
}
}