Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 23.11.2013
Сообщений: 11

JTree оказался не так прост как хотелось бы

21.04.2015, 16:30. Показов 1714. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Описываю происходящее:
По правой кнопке на CustomTree(extends JTree) вызывается компонент JPopupMenu с двумя JMenuItem(createRoot, createNode)
Вызывается из всплывающего меню:
Java
1
2
3
4
5
6
7
8
9
10
11
12
createNewNode.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                CustomTree.createNewNode();
            }
        });
createNewRoot.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                CustomTree.createNewRoot();
            }
        });
Сам класс CustomTree:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class CustomTree extends JTree {
    public static void createNewNode(/*Тут, возможно, стоит передать JTree.getRoot()*/){
        TextEnterFrame.createFrame().addComponentListener(new ComponentAdapter() {//createFrame() открывает окно с текстовым полем
            @Override
            public void componentHidden(ComponentEvent e) {//окно прячется при попытке закрыть, реализовал так ибо если оно закрывается - закрывается и начальное
                super.componentHidden(e);
                String nodeName = TextEnterFrame.getStringName();//возвращает String введенный с клавиатуры
                //Тут нужно реализовать добавление листа к переданному корню
            }
        });
    }
    public static void createNewRoot(/*Тут, возможно, стоит передать JTree */){
        TextEnterFrame.createFrame().addComponentListener(new ComponentAdapter() {
            @Override
            public void componentHidden(ComponentEvent e) {
                super.componentHidden(e);
                String rootName = TextEnterFrame.getStringName();
                //Тут нужно реализовать добавление корня в дереве
            }
        });
    }
 
}
Не могу нагуглить чего-нибудь, что помогло бы мне, во всех примерах юзают какой-то setModel и другие штуки, которые вовсе не интуитивно-понятны
Хотелось бы увидеть простой пример использование JTree в пределах одного класса, с комментариями.
Что-то вроде
Java
1
2
3
CustomJTree tree = new CustomJTree();//создали дерево
tree.addRoot();//добавили корень
tree.addNode(root);//добавили лист к корню root
и логику методов addRoot и addNode желательно тоже объяснить

так же буду рад любому дельному совету кроме "вот эту книгу почитай"
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.04.2015, 16:30
Ответы с готовыми решениями:

Setprecision работает не так как хотелось бы
Как я понимаю функция setprecision определяет сколько знаков после точки должно выводиться. Но на деле происходит иначе. #include...

Функция работает не так как хотелось бы(
хочу попробовать сделать калькульятор на JS . При нажатии на кнопку '1' вызывается функция push() , которая выводит в область (textarea)...

Код не работает так, как хотелось бы
В книге есть задача с кодом: #include "stdafx.h" #include <iostream> using namespace std; int main() { setlocale (0,...

2
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
21.04.2015, 20:17
Цитата Сообщение от White Tea Посмотреть сообщение
во всех примерах юзают какой-то setModel и другие штуки, которые вовсе не интуитивно-понятны
Если вам нужно делать хоть сколько-нибудь не самые примитивные операции - придется разобраться.
На самом деле всё довольно просто. Модель - это такой объект, который хранит собственно "данные".
Модель вы можете передать в JTree. После этого JTree будет у этой модели спрашивать: сколько в дереве узлов, что выводить напротив конкретного узла, и т.п.
Это предоставляет некую гибкость. Вы добавляете в вашу модель нужные данные - а JTree уже сам узнает у модели, что именно ему нужно отрисовать.
По умолчанию в JDK уже есть один готовый класс модели для JTree - DefaultTreeModel. Собственно в ваших обработчиках вам надо модифицировать именно его.

Туториал от oracle с примерами - http://docs.oracle.com/javase/... /tree.html

PS. Вроде бы JTree явно может иметь только один root. Это можно обойти, если скрыть root (tree.setRootNodeVisible(false), а в своей программе использовать child-ы root-а.
1
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
22.04.2015, 17:43
Цитата Сообщение от turbanoff Посмотреть сообщение
PS. Вроде бы JTree явно может иметь только один root.
Не вроде бы, а именно так. Любое дерево может иметь только 1 корень.

Цитата Сообщение от White Tea Посмотреть сообщение
так же буду рад любому дельному совету кроме "вот эту книгу почитай"
И всё же вот. 13 глава.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.04.2015, 17:43
Помогаю со студенческими работами здесь

Операция сравнения пошла не так, как хотелось бы
Пользователь вводит значения, сохраняющиеся в класс Product; программа запрашивает слово для поиска и при совпадение только-что введенного...

Программа работает неправильно (не так, как хотелось бы)
Здравствуйте! Есть задача: "Определите, можно ли вычеркнуть из данного массива одно число так, чтобы оставшиеся числа оказались...

Как сделать так, чтобы по ссылке класса А оказался класс Б
Добрый день! Есть Dictionary, содержащий экземпляры класса "Книга". Есть другие классы, ссылающиеся на эти экземпляры, допустим на А....

Помогите со скриптом на PHP. Он работает, но не так как хотелось бы
Помогите со скриптом на PHP. Он работает,но не так как хотелось бы. Я только учусь PHP. Вот главный скрипт: <html> ...

Переместить элемент массива так, чтобы он оказался упорядоченным
Дан массив A из N целых чисел. Все его элементы, кроме одного, упорядочены по возрастанию. Переместить значение этого элемента на такую...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru