繁体   English   中英

如何将JTree中的选择限制为特定类型的节点?

[英]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……在调用事件时调用验证,然后如果您不希望将焦点放在事件上,则先消耗事件因为验证失败而感动?”

阻止JTree选择更改发生的最佳方法?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM