Добавьте JTree (CheckboxTree) в JDialog

Это, наверное, простой вопрос, я не очень привык к программированию на Java. Но мне нужно создать диалог с CheckboxTree (вариант JTree с флажками, см. http://www.javaworld.com/javaworld/jw-09-2007/jw-09-checkboxtree.html)

Обратите внимание: я создал JDialog в графической среде NetBeans, поэтому он сгенерировал код для добавления кнопок и т. д. Поэтому мне нужно знать, как добавить это дерево после создания основных частей, так сказать... Возможно это проблема, потому что если я сделаю что-то вроде этого:

   JPanel panel = new JPanel();
   this.setContentPane(panel);

Затем я действительно вижу, что в диалоговом окне появляется дерево, но все кнопки и все остальное исчезли...

Мне удалось добавить его в JFrame и панель параметров, но я хочу, чтобы он был в пользовательском JDialog. Может ли кто-нибудь объяснить мне очень простыми словами, что мне нужно делать?

Вот мои слабые попытки:

Конструктор для JDialog:

public MetadataUI(java.awt.Frame parent, boolean modal) {
    super(parent, modal);
    initComponents();

    Container panel = getContentPane();
    panel.add(getTree());
    panel.repaint();
    this.pack();
}

метод getTree, который создает дерево флажков:

private static CheckboxTree getTree() {
    DefaultMutableTreeNode root, child;

    root = new DefaultMutableTreeNode("root");

    child = new DefaultMutableTreeNode("Colors");
    root.add(child);
    child.add(new DefaultMutableTreeNode("Cyan"));
    child.add(new DefaultMutableTreeNode("Magenta"));
    child.add(new DefaultMutableTreeNode("Yellow"));
    child.add(new DefaultMutableTreeNode("Black"));


    CheckboxTree checkboxTree = new CheckboxTree(root);
    checkboxTree.setVisible(true);
    return checkboxTree;
}

Эта перекраска и все такое — последняя попытка, основанная на том, что я нашел в гугле, но это не имело никакого значения, так что я предполагаю, что ошибся.

Будет оценен самый простой способ добавить дерево и сделать его видимым. Кажется, он работает точно так же, как JTree в отношении его добавления, но я не могу заставить его работать. Таким образом, даже если ни у кого нет опыта работы с этим конкретным плагином checkboxtree, тот же самый (самый простой) код для использования JTree в JDialog, вероятно, подойдет!

РЕДАКТИРОВАТЬ:

В ответ на Эндрю, вот то же самое (моя лучшая попытка) с обычным JTree:

private static JTree getTree() {
    DefaultMutableTreeNode root, child;

    root = new DefaultMutableTreeNode("root");

    child = new DefaultMutableTreeNode("Colors");
    root.add(child);
    child.add(new DefaultMutableTreeNode("Cyan"));
    child.add(new DefaultMutableTreeNode("Magenta"));
    child.add(new DefaultMutableTreeNode("Yellow"));
    child.add(new DefaultMutableTreeNode("Black"));


    JTree tree = new JTree(root);
    tree.setVisible(true);
    return tree;
}

РЕДАКТИРОВАТЬ 2:

В ответ на Максим я в замешательстве. Вещи, которые очевидны для вас, вероятно, утеряны для меня. Заимствуя некоторые вещи из вашего кода, это лучшее, что я мог придумать (не работает):

public MetadataUI(java.awt.Frame parent, boolean modal) {
    super(parent, modal);
    initComponents();


    JScrollPane s = new JScrollPane();

    s.getViewport().add(getTree());

    getContentPane().add(s, BorderLayout.CENTER);

    setVisible(true);
}

person Anders    schedule 26.11.2012    source источник
comment
тот же (самый простой) код для использования JTree в JDialog, вероятно, подойдет! То же самое, что и SSCCE вашей лучшей попытки.   -  person Andrew Thompson    schedule 26.11.2012
comment
@AndrewThompson: Извините, я не понимаю комментарий...   -  person Anders    schedule 26.11.2012
comment
Опубликуйте SSCCE (используя стандартный JTree) вашей лучшей попытки.   -  person Andrew Thompson    schedule 26.11.2012


Ответы (1)


Если вы действительно создали свой JDialog с графическим интерфейсом Netbeans (это форма JDialog), а компонент, который вы пытаетесь интегрировать в то, что у вас уже есть, предоставляет конструктор с нулевым аргументом, попробуйте следующее:

  1. откройте существующий JDialog в режиме конструктора
  2. В виде Navigator щелкните правой кнопкой мыши [JDialog] или любой другой узел верхнего уровня (должен быть родственным "Другим компонентам") и выберите Add From Palette > Beans > Choose Bean
  3. введите полное имя класса, представляющего ваш компонент JTree (например, com.example.jtree.SomeJTreeComponent), и подтвердите. Если компонент действительно является JTree, он, вероятно, будет добавлен без проблем.
  4. (необязательно) На этом этапе дерево может быть заключено или не заключено в JScrollPane. Если это не так, вы можете добиться этого вручную, повторив части шага 2. для вновь добавленного компонента и выбрав Enclose in на этот раз.

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

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

person predi    schedule 26.11.2012
comment
Большое спасибо! Это сделало это! :-) - person Anders; 26.11.2012