【问题标题】:Modify JTree nodes appearance修改 JTree 节点外观
【发布时间】:2019-07-23 14:21:46
【问题描述】:

我正在尝试将 JTree 节点可视化为 JButton,我已经尝试使用 Jbutton 对象创建 DefaultMutableTreeNode 并将其添加到 JTree:

JButton button = new JButton("Thing");
DefaultMutableTreeNode root = new DefaultMutableTreeNode(button);
JTree alberoClassi = new JTree(root);

这些仅显示带有黑色参数的错误行。
网上搜了一下只发现需要一个TreeRendererCell类,但是没有一个结果显示如何使用。
是否有一些教程可以找到一些示例来完成任务?

【问题讨论】:

标签: java swing jbutton jtree


【解决方案1】:

最后我设法使用实现javax.swing.tree.TreeCellRenderer 接口的外部类解决了这个问题。

public class ClassCellRenderer implements javax.swing.tree.TreeCellRenderer {

JLabel className = new JLabel(" ");
JButton renderer = new JButton();
DefaultTreeCellRenderer defaultRenderer = new DefaultTreeCellRenderer();

public ClassCellRenderer() {
    renderer.add(className);
}

@Override
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
    Component returnValue = null;
    if ((value != null) && (value instanceof DefaultMutableTreeNode)) {
      Object userObject = ((DefaultMutableTreeNode) value).getUserObject();
      if (userObject instanceof String) {
          String e = (String) userObject;
          className.setText(e);
      }
      returnValue = renderer;
    }
    if (returnValue == null) {
      returnValue = defaultRenderer.getTreeCellRendererComponent(tree, value, selected, expanded,
          leaf, row, hasFocus);
    }
    return returnValue;
}
}

JLabel 和 JButton 可以使用任何其他所需的组件进行更改。 要将渲染器添加到树中,我使用了这些行:

    alberoClassi = new JTree(root);
    TreeCellRenderer renderer = new ClassCellRenderer();
    alberoClassi.setCellRenderer(renderer); //aggiunta del renderer per i nodi

【讨论】:

    猜你喜欢
    • 2012-06-22
    • 2014-07-31
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    • 2011-01-21
    • 2013-04-07
    相关资源
    最近更新 更多