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

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

21.04.2015, 16:30. Просмотров 851. Ответов 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; программа запрашивает слово для поиска...

2
turbanoff
Эксперт Java
4055 / 3790 / 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
632 / 524 / 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

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

Помогите со скриптом на 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 - 2020, vBulletin Solutions, Inc.