【问题标题】:How to call DefaultTreeCellRenderer for specific nodes in the JTree如何为 JTree 中的特定节点调用 DefaultTreeCellRenderer
【发布时间】:2015-03-07 19:02:55
【问题描述】:

我有一个自定义的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");

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

【问题讨论】:

    标签: java swing jtree treecellrenderer


    【解决方案1】:

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

    【讨论】:

    • 感谢您的帖子。您的意思是可以通过在数组中收集文件名并在渲染中禁用所有文件名来完成?
    • 是的,这是一种可行的方法。
    猜你喜欢
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    • 2018-06-06
    • 2013-02-04
    • 1970-01-01
    • 2015-09-12
    相关资源
    最近更新 更多