【问题标题】:How to get components rendered inside JTree (Swing Component Hierachy)如何获取在 JTree 中呈现的组件(Swing 组件层次结构)
【发布时间】:2017-04-08 06:51:00
【问题描述】:

出于某些特定目的,我试图通过访问 Swing/AWT 组件层次结构来操作 UI,但我被困在 JTree 上。

我有一个使用自定义 TreeCellRenderer 渲染的 JTree,并且在每个节点中都有 JCheckBox。

我正在尝试获取用于呈现特定节点的特定 JCheckBox 对象,以编程方式更改其状态,我拥有的是 JTree 组件对象。

我找不到创建 JCheckBox 组件以呈现特定节点的方法。

如果我继续递归调用 Container.getComponents(),我会达到:

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

但这些似乎并没有给出由自定义渲染器渲染的组件。

【问题讨论】:

  • 没有为特定节点创建复选框。这不是渲染器的工作方式。单个复选框实例用于绘制所有节点。要更改节点的显示方式,您需要更改模型,触发事件,以便树知道模型已更改,并要求渲染器重新渲染更改的节点。
  • 感谢您指出正确的方向。

标签: java swing awt jtree


【解决方案1】:

正如@JB-Nizet 在评论中指出的那样,我通过使用反射更新自定义模型对象解决了我的问题。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-08
    • 2018-03-17
    • 2011-09-02
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    相关资源
    最近更新 更多