修改JTree节点外观

时间:2019-03-01 14:22:13

标签: java swing jbutton jtree

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

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

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

1 个答案:

答案 0 :(得分: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
相关问题