Изменить внешний вид узлов JTree - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь визуализировать узел JTree как JButton, я уже пытался создать DefaultMutableTreeNode с объектом Jbutton и добавил его в JTree:

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

Они показывают только ошибкустрока с черными параметрами.
Поиск в сети. Я обнаружил, что мне нужен класс TreeRendererCell, но ни один из результатов не показывает, как его использовать.
Существуют ли учебники, в которых я могу найти примеры для выполнениязадача

1 Ответ

0 голосов
/ 03 марта 2019

Наконец мне удалось решить эту проблему с помощью внешнего класса, который реализует интерфейс 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
...