Изменить внешний вид узлов JTree

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

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

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

Что-то вроде это

XtremeBaumer 01.03.2019 15:47
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
48
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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

Другие вопросы по теме