修改JTree节点外观

问题描述 投票:0回答:1

我正在尝试将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个回答
0
投票

最后,我设法使用实现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
© www.soinside.com 2019 - 2024. All rights reserved.