java - 如何为 JTree 中的特定节点调用 DefaultTreeCellRenderer

标签 java swing jtree treecellrenderer

我有一个自定义的 DefaultTreeCellRenderer,它禁用 JTree 中的节点。

这是它的代码:

static class CustomDefaultTreeCellRenderer extends DefaultTreeCellRenderer{
        @Override
        public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus)
        {
            boolean enabled = true; // <-- here is the logic for enable/disable cell


            Component treeCellRendererComponent = super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
            treeCellRendererComponent.setEnabled(enabled);
            return treeCellRendererComponent;

        }
}

但我无法在我的代码中使用它。我无法在任何需要的地方调用它的方法或东西。例如,当按下按钮时,或者当项目具有特定名称时。

这是一个示例,我的方法遍历模型并找到与给定字符串匹配的节点。

protected void walk(TreeModel model, Object o, String word){
    int  cc;
    cc = model.getChildCount(o);
    for( int i=0; i < cc; i++) {
      Object child = model.getChild(o, i);
      if (model.isLeaf(child) && child.toString().equals(word)){
        System.out.println(child);
        // HERE I NEED TO MAKE "child" DISABLED 
      }
      else {
        walk(model,child, word); 
        }
     }
}

这就是我将 CustomDefaultTreeCellRenderer 设置到我的树的方法:

tree.setCellRenderer(new CustomDefaultTreeCellRenderer());

这是我的步行方法的一个示例:

walk(tree.getModel(), tree.getModel().getRoot(), "DS.png");

那么知道如何禁用特定节点吗?

最佳答案

Swing 框架控制何时为节点调用 TreeCellRenderer;你对此无法控制。您需要检查 CustomDefaultTreeCellRenderer 中所需的条件(例如,节点的名称)。如果不需要禁用节点,则无需调用 setEnabled()。

关于java - 如何为 JTree 中的特定节点调用 DefaultTreeCellRenderer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28918802/

相关文章:

java - 如何将 Tomcat 日志复制到 Jenkins 并在每次部署后显示它们

java - Eclipse RCP 4.10 Workbench 本地文件历史记录

java - 如何制作具有固定日期格式的 jtextfield?

java - Java 中的 GUI 线程

java - 使用Java中的霍尔分区快速排序算法对数组进行排序

Java 与不同类中的对象交互

Java:组件在事件发生后消失

Java JTree 节点是一个可点击的 URL 链接

java - TreeUI 的自定义 ui 委托(delegate)

java - JTree如何将叶节点设置为可扩展