繁体   English   中英

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

[英]How to call DefaultTreeCellRenderer for specific nodes in the JTree

我有一个自定义的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方法的一个示例:

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

那么有什么想法如何禁用特定节点?

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

暂无
暂无

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

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