Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пример работы с JTree 
:(
    Опции темы
AntonSaburov
Дата 2.11.2004, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Вопрос: Работа с 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);
    }
}

PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0970 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.