Java 如何将JTree中的选择限制为特定类型的节点?
想法很简单:我有一个Java 如何将JTree中的选择限制为特定类型的节点?,java,swing,selection,jtree,Java,Swing,Selection,Jtree,想法很简单:我有一个JTree,由TreeNode的不同子类组成 问题:如何允许用户仅选择类型为XyNode的节点 我曾想过只添加一个TreeSelectionListener,并取消选择用户可能选择的任何“错误”节点,但它似乎很快就完成了 我想到了编写自己的TreeSelectionModel,但界面似乎并不适合这项工作 有人对此有经验或有好的解决方案吗?我以前见过这个建议: “不确定这是最佳做法,但也许您可以在要验证的组件上放置一个FocusListener…在调用事件时调用您的验证,如果由
JTree
,由TreeNode
的不同子类组成
问题:如何允许用户仅选择类型为XyNode
的节点
我曾想过只添加一个TreeSelectionListener
,并取消选择用户可能选择的任何“错误”节点,但它似乎很快就完成了
我想到了编写自己的TreeSelectionModel
,但界面似乎并不适合这项工作
有人对此有经验或有好的解决方案吗?我以前见过这个建议: “不确定这是最佳做法,但也许您可以在要验证的组件上放置一个FocusListener…在调用事件时调用您的验证,如果由于验证失败而不希望移动焦点,则使用then事件?”
把它弄明白了<代码>树选择模型是正确的选择 用户单击时,UI在
TreeSelectionModel
中调用setSelectedPaths(TreePath[]paths)
和addSelectedPaths(TreePath[]paths)
,然后将这些方法的返回值设置为选择
只需扩展DefaultTreeSelectionModel
并覆盖两种方法,例如:
public TreePath[] setSelected(TreePath[] paths) {
super(getValidPaths(paths));
}
public TreePath[] getValidPaths(TreePath[] paths) ...
您可以添加任何类型的检查,并且可以分别处理添加(Ctrl单击)和设置(正常单击)。谢谢您的回答。我通过尝试找到了链接中的另一个答案(投票数更多)。