powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Левая кнопка в JTree
8 сообщений из 8, страница 1 из 1
Левая кнопка в JTree
    #32507238
Фотография oson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа! Чтоб полюзователь имел выпадающее меню при нажатии на правую кнопку мыши на выбранном ноде - как реализуется.
Никогда не делал, а хочется
...
Рейтинг: 0 / 0
Левая кнопка в JTree
    #32508486
Грасоff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я вроде на винграде приводил в форуме пример кода

.: 6.000.000 ways to die :.
...
Рейтинг: 0 / 0
Левая кнопка в JTree
    #32508729
Фотография oson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не нашел я там такого!
...
Рейтинг: 0 / 0
Левая кнопка в JTree
    #32508755
Грасоff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://forum.vingrad.ru/index.php?showtopic=21432

тока там малость не то :)

тебе чего конкретнее надо? у меня дохера накодено по jtree... в том числе и с попап-меню

.: 6.000.000 ways to die :.
...
Рейтинг: 0 / 0
Левая кнопка в JTree
    #32508878
Фотография oson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
издай книгу - я б почитал :)
Хочу, чтоб пользователь работал с базами, как в DBAStudio Oracle -
ну конечно задачи более частные. И вот делаю это так:
1.Установил на JPanel две JScrollPane - справа JTree, слева - JPanel,
внизу - JTextArea. Думал делать TreeModel под объекты типа Base, Table, Column etc -но потом просто использовал Default... и привязал к ним такого плана обэекты- не знаю, правильно так или нет.
2. Когда выбирается node - достаю из него userObject (они все расширяют класс Base - ну мой такой класс), цепляю к нему вот так слушатель
base.removePropertyChangeListener(propertyListener);
base.addPropertyChangeListener(propertyListener);
и вызываю метод getPanel() из userObject для выбранного же нода и
ставлю ее на правую панель JScrollPane.Короче панель на панель и validate()?
3.Теперь хочу, чтоб когда я выбираю этот нод и нажимаю правую мышь, выпадало контекстное меню в зависимости от объекта - ну то же самое, что появляется в правой панеле - и там например, если выбрана база, то чтоб было "подсоединиться..." - если таблица - "просмотреть, ..."
Как ты это делаешь. И вообще всю эту конструкцию правильно я леплю?
...
Рейтинг: 0 / 0
Левая кнопка в JTree
    #32509164
Грасоff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да я в общем так же. т.е. использую default. а вот CellRenderer - свой. надо нам чтоб ноды были с разными иконками и прочей херней.

userObject - тоже свой интерфейс, который потом реализуется нужными классами - как у тебя.

дальше мне надо было по клике на ноде (т.е. ее выборе) показывать список свойств в зависимости от userObject'а в таблице. каждый класс, реализующий мой интерфейс NodeItem реализовывал метод getProperties, в который я спихивал все свойства userObject'a. для этого надо было писать реализацию TableModel. написал, но показалось херней полной и по причине небольшого количества классов, реализующих NodeItem (4 штуки) сделал так: на панель свойств повесил CardLayout, на каждую панель которого сделал свой ui для каждого класса из userObject. и переключал эти самые card'ы при выборе ноды. пока работает :)

с попап-меню тоже несложно. у меня класс (TreePopupMenu), расширяющий JPopupMenu. и класс (PopupListener), расширяющий MouseAdapter. ничего сложного не делают - для спокойствия и удобства :) в частности PopupListener позволяет при клике правой кнопкой выбрать ноду:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
  public final void mousePressed(MouseEvent e) {
    if (isSelectTreeOnPopup() && e.getSource() instanceof JTree) {
      JTree tree = (JTree) e.getSource();
      tree.setSelectionRow(tree.getRowForLocation(e.getX(), e.getY()));
    }
    maybeShowPopup(e);
  }

  private final void maybeShowPopup(MouseEvent e) {
    if (e.isPopupTrigger()) {
      if (e.getSource() instanceof JTree) {
        JTree tree = (JTree)e.getSource();
        if (tree.getSelectionCount() ==  0 ) {
          return;
        }
      }
      menu.show(e.getComponent(), e.getX(), e.getY());
    }
  }

Код: plaintext
menu
- приватный член этого класса:

Код: plaintext
JPopupMenu menu;

далее создаем экземпляры:

Код: plaintext
1.
2.
JTree projectTree =  new  JTree();
TreePopupMenu menuJTree =  new  TreePopupMenu();
PopupListener treePopupListener =  new  PopupListener(menuJTree);

для JTree - ставим слушателя:

Код: plaintext
projectTree.addMouseListener(treePopupListener);

и наполняем меню пунктами JMenuItem. в частности есть пункт "свойства", которые у каждого userObject'а свои.

по клике правой кнопкой на ноде определяется выбранная нода, например упомянутый "свойства", и в зависимости от userObject'a показывается диалог свойств для этого userObject'a.

написал тут текста дохера с большими перерывами :) может чего и непонятно :)

.: 6.000.000 ways to die :.
...
Рейтинг: 0 / 0
Левая кнопка в JTree
    #32509398
Фотография oson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо.Сейчас попробую разобраться.
...
Рейтинг: 0 / 0
Левая кнопка в JTree
    #32513376
Фотография oson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что именно ты переопределяешь в TreePopupMenu - то есть зачем надо новый класс делать?
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Левая кнопка в JTree
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]