Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:

Error. Page cannot be displayed. Please contact your service provider for more details. (18)


Пример работы с JTree

Поиск:
Вопрос: Работа с JTree

Ответ:

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

Наложены следующие ограничения:
- В корень добавляется только Middle
- В Middle добавляется только Deep
- Ниже Deep добавить ничего нельзя
- Удалить можно только те узлы, которые не имеют подузлов
- Root удалить нельзя

А вот собственно код:
Код

import javax.swing.*;
import javax.swing.tree.*;
import java.awt.*;
import java.awt.event.*;


public class MainClass extends JFrame
{
   JTree jTree = new JTree();
   public MainClass() throws HeadlessException
   {
       // Добавим кнопку для добавления и укажем обработчик addNewItem()
       JButton add_btn = new JButton("Add");
       add_btn.addActionListener( new ActionListener() {
           public void actionPerformed(ActionEvent e) {
               addNewItem();
           }
       });
       getContentPane().add("North", add_btn);

       // Добавим кнопку для удаления и укажем обработчик removeItem()
       JButton remove_btn = new JButton("Remove");
       remove_btn.addActionListener( new ActionListener() {
           public void actionPerformed(ActionEvent e) {
               removeItem();
           }
       });
       getContentPane().add("South", remove_btn);

       // Создадим один узел ROOT
       DefaultMutableTreeNode top = new DefaultMutableTreeNode("ROOT");
       jTree = new JTree(top);

       getContentPane().add("Center", new JScrollPane(jTree));
       setBounds(100, 100, 500, 400);
   }

   public void addNewItem()
   {
       // ВАЖНО - работа с уже готовым деревом может производится только через модель дерева.
       // Только в этом случае гарантируется правильная работа и вызов событий
       // В противном случае новые узлы могут быть не прорисованы
       DefaultTreeModel model = (DefaultTreeModel)jTree.getModel();
       Object obj = jTree.getLastSelectedPathComponent();
       if(obj!=null)
       {
           DefaultMutableTreeNode sel = (DefaultMutableTreeNode)obj;
           // Смотрим уровень вложенности и работаем в соответствии с ним
           if(sel.getLevel()==1) {
               DefaultMutableTreeNode tmp = new DefaultMutableTreeNode("Deep");
               model.insertNodeInto(tmp, sel, sel.getChildCount());
           }
           if(sel.isRoot()) {
               DefaultMutableTreeNode tmp = new DefaultMutableTreeNode("Midle");
               model.insertNodeInto(tmp, sel, sel.getChildCount());
           }
           jTree.expandPath(new TreePath(sel.getPath()));
       }
   }

   public void removeItem()
   {
       // Смотри замечание в addNewItem()
       DefaultTreeModel model = (DefaultTreeModel)jTree.getModel();
       Object obj = jTree.getLastSelectedPathComponent();
       if(obj!=null)
       {
           DefaultMutableTreeNode sel = (DefaultMutableTreeNode)obj;
           // Корень удалять нельзя
           if(!sel.isRoot())
           {
               if(sel.getChildCount()==0)
                   model.removeNodeFromParent(sel);
               else
                   // Если есть "детишки" выведем сообщение
                   JOptionPane.showMessageDialog(null, "Remove all subnodes");
           }
       }
   }

   public static void main(String[] args) throws HeadlessException
   {
       MainClass mainClass = new MainClass();
       mainClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       mainClass.setVisible(true);
   }
}
Автор: AntonSaburov
Сайт: http://






Просмотров: 16114

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную