Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java: GUI, Графика
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
White Tea
0 / 0 / 0
Регистрация: 23.11.2013
Сообщений: 11
1

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

21.04.2015, 16:30. Просмотров 793. Ответов 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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2015, 16:30
Ответы с готовыми решениями:

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

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

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

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

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

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

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

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

Цитата Сообщение от White Tea Посмотреть сообщение
так же буду рад любому дельному совету кроме "вот эту книгу почитай"
И всё же вот. 13 глава.
1
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2015, 17:43

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

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

Переставить строки и столбцы матрицы так чтобы максимальный элемент оказался справа сверху
#include "stdafx.h" #include <cstdlib> #include <iostream> #include <stdlib.h> using namespace...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.