JTree, не показывающий добавленные узлы

Я пытаюсь создать свое первое JTree , но когда я пытаюсь добавить свои узлы к дереву, изменения не вступают в силу и все, что это показано, дерево с некоторыми узлами по умолчанию в нем (цвета, спорт, еда).

Мой главный код сигнализации полотнищами, в котором проживает дерево:

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
public class Scenario1Panel extends JPanel
{

/**
 * 
 */
private static final long serialVersionUID = 1L;

public Scenario1Tree scenario1Tree;

public Scenario1Panel()
{
    scenario1Tree = new Scenario1Tree();
    add(scenario1Tree);
}
public static void main(String args[]) 
{
    try
    {
        String lookAndFeel = UIManager.getSystemLookAndFeelClassName();
        System.out.println(lookAndFeel);
        UIManager.setLookAndFeel(lookAndFeel);
    }
    catch(Exception e)
    {
        System.out.println("couldn't get that LookAndFeel");
    }

    Scenario1Panel mgr = new Scenario1Panel();

    JFrame frame = new JFrame();

    frame.add(mgr);
    frame.pack();
    frame.setVisible(true);

}

}

Мой код дерева:

import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.UIManager;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeSelectionModel;
public class Scenario1Tree extends JTree
{
/**
 * 
 */
private static final long serialVersionUID = 1L;

private JTree tree;

public Scenario1Tree()
{
    DefaultMutableTreeNode top = new DefaultMutableTreeNode("Scenario1");
    createNodes(top);
    tree = new JTree(top);

    //Create a tree that allows one selection at a time.
    tree.getSelectionModel().setSelectionMode
        (TreeSelectionModel.SINGLE_TREE_SELECTION);

    //Create the scroll pane and add the tree to it. 
    JScrollPane treeView = new JScrollPane(tree);


}

private void createNodes(DefaultMutableTreeNode top) {
    DefaultMutableTreeNode loginUser1 = null;
    DefaultMutableTreeNode addNewUsers = null;
    DefaultMutableTreeNode addNewUsersBreakout = null;

    loginUser1 = new DefaultMutableTreeNode("Login User 1");
    top.add(logintUser1);

    addNewUsers = new DefaultMutableTreeNode("Add New Users");
    top.add(addNewUsers);

    addNewUsersBreakout = new DefaultMutableTreeNode("Add User2");
    addNewUsers.add(addNewUsersBreakout );
    addNewUsersBreakout = new DefaultMutableTreeNode("Add User3");
    addNewUsers.add(addNewUsersBreakout );
    addNewUsersBreakout = new DefaultMutableTreeNode("Add User4");
    addNewUsers.add(addNewUsersBreakout );
    addNewUsersBreakout = new DefaultMutableTreeNode("Add User5");
    addNewUsers.add(addNewUsersBreakout );

}

public static void main(String args[]) 
{
    try
    {
        String lookAndFeel = UIManager.getSystemLookAndFeelClassName();
        System.out.println(lookAndFeel);
        UIManager.setLookAndFeel(lookAndFeel);
    }
    catch(Exception e)
    {
        System.out.println("couldn't get that LookAndFeel");
    }

    Scenario1Tree tree = new Scenario1Tree();

    JFrame frame = new JFrame();

    frame.add(tree);
    frame.pack();
    frame.setVisible(true);

}

}

Кто-то мог, пожалуйста, объяснить, что я делаю неправильно?

1
nl ja de
Сначала ищите демонстрационный пример/примеры JTree. YouTube или другие. NetBeans IDE имеет хорошего редактора GUI. Осмотрите код. Возможно, вы уже используете NetBeans, потому что он использует фиктивный TreeModel в качестве конструктора JTree args, но можно также вызвать конструктора с корневым узлом. Кодекс теперь должен быть изменен очень.
добавлено автор Joop Eggen, источник
общественный класс Scenario1Tree расширяет JTree Don' t расширяют дерево если, добавляя новую функциональность или отвергая старый. Don' t простираются JPanel также, просто держат случай.
добавлено автор Andrew Thompson, источник
Проблема - I' ve никогда не использовал Яву, таким образом, это все плохо мне знакомо. I' ve, пытаясь последовать этому примеру: docs.oracle.com/javase/tutorial/uiswing/components/tree.html Don' t я должен использовать, простирается, чтобы использовать методы в классе, любят, добавляют? Если я удаляю, "простирается, дерево" тогда добавляют (Scenario1Tree) больше не работает.
добавлено автор Matt, источник

2 ответы

Вы создаете один JTree слишком многие. Вы добавляете все свои узлы к переменной JTree и все же используете расширенный класс JTree для показанного дерева, у последнего которого не было узлов, добавленных к нему.

Я предлагаю, чтобы у вас не было своего класса, расширяют JTree, что вы вместо этого даете ему метод, говорите getTree() , который возвращает JTree когда и при необходимости.

т.е.,

// get rid of extends JTree
public class Scenario1Tree//extends JTree
{
private static final long serialVersionUID = 1L;

private JTree tree;

public Scenario1Tree()
{
    DefaultMutableTreeNode top = new DefaultMutableTreeNode("Scenario1");
    createNodes(top);
    tree = new JTree(top);

    tree.getSelectionModel().setSelectionMode
        (TreeSelectionModel.SINGLE_TREE_SELECTION);

   //JScrollPane treeView = new JScrollPane(tree);

}

public JTree getTree() {
  return tree;
}
6
добавлено
+1 я думаю, что ваш подход еще лучше, но потребовал бы немного большего количества изменений в оригинальном коде.
добавлено автор StanislavL, источник
@Matt: избавьтесь от , расширяет JTree из вашего кода. Начните оттуда.
добавлено автор Hovercraft Full Of Eels, источник
@Matt: согласно редактируют.
добавлено автор Hovercraft Full Of Eels, источник
I' m жаль. I' m приходящийся действительно нелегко выяснение различия между тем, что я написал и Обучающая программа Oracle. I' m создающий все мои узлы в переменной вершине и затем определяющий дерево = новый Jtree (вершина) как пример. Очевидно, I' m пропавшие без вести чего-то очевидного в моем понимании.
добавлено автор Matt, источник

В Scenario1Tree вместо JTree требование создания случая

setModel(new DefaultTreeModel(top));

На самом деле вам не нужен JTree случай вообще.

5
добавлено
Мой ответ идет другой маршрут - что он shouldn' у t есть его класс, расширяют JTree, но это будет работать также (хотя я предпочитаю избегать наследования где it' s не необходимый). 1 +
добавлено автор Hovercraft Full Of Eels, источник
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async