[英]How can I limit selection in a JTree to a specific type of node?
这个想法很简单:我有一个JTree
它由TreeNode
的不同子类组成。
问题:如何允许用户仅选择XyNode
类型的节点?
我曾想过只添加一个TreeSelectionListener
并取消选择用户可能选择的任何“错误”节点,但它看起来又快又脏。
我想到了编写自己的TreeSelectionModel
,但是该接口似乎并不适合该工作。
任何人都有经验或好的解决方案吗?
弄清楚了。 TreeSelectionModel
是执行此操作的正确位置。
当用户单击时,UI会在TreeSelectionModel
调用setSelectedPaths(TreePath[] paths)
和addSelectedPaths(TreePath[] paths)
,然后将这些方法的返回值设置为Selection。
只需扩展DefaultTreeSelectionModel
并覆盖两个方法即可,例如:
public TreePath[] setSelected(TreePath[] paths) {
super(getValidPaths(paths));
}
public TreePath[] getValidPaths(TreePath[] paths) ...
您可以添加任何种类的检查,并且可以区别地处理add(Ctrl-Click)和set(normal Click)。
我以前看过这个建议:
“不确定这是最佳实践,但是也许您可以在要验证的组件上放置一个FocusListener……在调用事件时调用验证,然后如果您不希望将焦点放在事件上,则先消耗事件因为验证失败而感动?”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.