简体   繁体   English

如何在JTree内部渲染组件(Swing Component Hierachy)

[英]How to get components rendered inside JTree (Swing Component Hierachy)

For some specific purpose I am trying to manipulate UI by just accessing Swing/AWT component hierarchy, and I am stuck at JTree. 出于某些特定目的,我试图通过仅访问Swing / AWT组件层次结构来操纵UI,而我被困在JTree中。

I have a JTree which is rendered using a custom TreeCellRenderer, and have JCheckBox in each node. 我有一个使用自定义TreeCellRenderer呈现的JTree,并且在每个节点中都有JCheckBox。

样本JTree

I am trying to obtain a specific JCheckBox object used to render a specific node, to programmatically change it's state, what I have is JTree Component object. 我正在尝试获取用于呈现特定节点的特定JCheckBox对象,以编程方式更改其状态,我拥有的是JTree Component对象。

I couldn't find a way to get the JCheckBox component created to render a specific node. 我找不到一种方法来创建JCheckBox组件以呈现特定的节点。

If I keep calling Container.getComponents() recursively, I reach upto : 如果我继续递归地调用Container.getComponents(),则可达:

class javax.swing.JTree
class javax.swing.CellRendererPane
class javax.swing.tree.DefaultTreeCellRenderer

but these doen't seems to giving out components rendered by custom renderers. 但是这些似乎并没有给出自定义渲染器渲染的组件。

As @JB-Nizet pointed out in comment, I solved my problem by updating custom model object using reflection. 正如@ JB-Nizet在评论中指出的那样,我通过使用反射更新自定义模型对象解决了我的问题。

Object modelObject = nodeToSelect.getUserObject();
Method method = modelObject.getClass().getMethod("setSelected", boolean.class);
method.invoke(modelObject,true);

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

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