powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по JTree
15 сообщений из 15, страница 1 из 1
Вопрос по JTree
    #32765530
ShkVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При кликаньи на элементе дерева правой кнопкой мыши нужно определить элемент дерева на котором произошёл клик. Как это сделать?
перехватываю mousePressed(MouseEvent e). Но MouseEvent не содержит пути. Подскажите пожалуйста как определить элемент на котором произошёл клик
...
Рейтинг: 0 / 0
Вопрос по JTree
    #32765568
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DefaultMutableTreeNode l_node;
TreePath tp;

tp = tree.getSelectionPath();
if (tp == null){
return;
}
l_node = (DefaultMutableTreeNode)(tp.getLastPathComponent());

где tree - объект JTree. По крайней мере - у меня так :)
...
Рейтинг: 0 / 0
Вопрос по JTree
    #32766108
ArchiMage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-умолчанию JTree не выбирает элемент, на котором кликаешь правой кнопкой мыши.
Для начала надо его выбрать, а потом, как в вышеприведенном посте.
...
Рейтинг: 0 / 0
Вопрос по JTree
    #32766148
ShkVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vadim RomanenkoDefaultMutableTreeNode l_node;
TreePath tp;

tp = tree.getSelectionPath();
if (tp == null){
return;
}
l_node = (DefaultMutableTreeNode)(tp.getLastPathComponent());

где tree - объект JTree. По крайней мере - у меня так :)

Это не то.
Мне надо по щелчку ПРАВОЙ кнопки мыши. Почему-то когда кликаешь правой кнопкой на дереве эл-мент не выделяется (не устанавливается курсор, что он выбран). Можно ли как-нибуть определить на каком элементе произошёл клик? Или это не возможно для правой кнопки мыши
...
Рейтинг: 0 / 0
Вопрос по JTree
    #32766398
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот я вроде посмотрел в доке - есть такой пример:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
      public   void  mousePressed(MouseEvent e) {
          int  selRow = tree.getRowForLocation(e.getX(), e.getY());
         TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());
          if (selRow != - 1 ) {
              if (e.getClickCount() ==  1 ) {
                 mySingleClick(selRow, selPath);
             }
              else   if (e.getClickCount() ==  2 ) {
                 myDoubleClick(selRow, selPath);
             }
         }
     }

а по имеющемуся пути - можно определить node как показано выше
...
Рейтинг: 0 / 0
Вопрос по JTree
    #32766454
ShkVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
После выбора какогото элемента дерева надо произвести какое-то действие.
Можно конечно взять полный путь и передать его в switch и по этому пути определить какие действия нужно сделать. Может можно это сделать как-то по другому? Можно ли элементу присвоить какой-нибудь псевдоним (ID) и в switch передавать псевданим и работать с псевдонимами, а не с путями. Если можно то подскажите методы пожалуйста.
Или может ещё есть какие-нибудь варианты ещё, чтобы выполнить действие на выбор элемента?
Если нет ни каких других возможностей кроме как определять по пути сообщите пожалуйста.
Заранее спасибо.
...
Рейтинг: 0 / 0
Вопрос по JTree
    #32766572
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот - с каким-то элементом дерева можно ассоциировать класс.

node = new DefaultMutableTreeNode(nodeData);
model.insertNodeInto(node, admtn, admtn.getChildCount());

где nodeData - экземпляр какого-то класса, которым я пичкаю все элементы дерева, admtn - DefaultMutableTreeNode, к которому добавляются новые элементы. Потом, при выборе конкретного элемента, я выбираю из него userObject и работаю с классом, представляющим информацию об этом узле:

mnode = (ITreeNode)(l_node.getUserObject());
ll_id = mnode.getID();
где ITreeNode - это и есть тот самый класс, представляющий узел дерева, а mnode - его экземпляр.
...
Рейтинг: 0 / 0
Вопрос по JTree
    #32766632
ShkVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vadim RomanenkoВот - с каким-то элементом дерева можно ассоциировать класс.

node = new DefaultMutableTreeNode(nodeData);
model.insertNodeInto(node, admtn, admtn.getChildCount());

где nodeData - экземпляр какого-то класса, которым я пичкаю все элементы дерева, admtn - DefaultMutableTreeNode, к которому добавляются новые элементы. Потом, при выборе конкретного элемента, я выбираю из него userObject и работаю с классом, представляющим информацию об этом узле:

mnode = (ITreeNode)(l_node.getUserObject());
ll_id = mnode.getID();
где ITreeNode - это и есть тот самый класс, представляющий узел дерева, а mnode - его экземпляр.

Что-то я не понял, что за nodeData. Как этот объект отобразится в дереве?
Что из себя он представляет?
...
Рейтинг: 0 / 0
Вопрос по JTree
    #32767227
ShkVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
master=new Master(appData);
appData.getTreeModel().insertNodeInto(new DefaultMutableTreeNode(master), treeNode2,0);
getTreeModel - возвращает DefaultTreeModel:
Конструктор использую public XmlTree(TreeModel newModel, ApplicationData appData):
Почему не вставляется элемент?
...
Рейтинг: 0 / 0
Вопрос по JTree
    #32768286
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShkVal
Что-то я не понял, что за nodeData. Как этот объект отобразится в дереве?
Что из себя он представляет?
nodeData - это некоторый класс, ассоциированный с узлом дерева. Если не ошибаюсь, при отопражении узла, созданного на основе такого класса, для отображения выводится то, что возвращается методом toString() созданного экземпляра класса.
...
Рейтинг: 0 / 0
Вопрос по JTree
    #32768302
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShkValmaster=new Master(appData);
appData.getTreeModel().insertNodeInto(new DefaultMutableTreeNode(master), treeNode2,0);
getTreeModel - возвращает DefaultTreeModel:
Конструктор использую public XmlTree(TreeModel newModel, ApplicationData appData):
Почему не вставляется элемент?

Возможно, метод Master.toString() возвращает пустую строку?
...
Рейтинг: 0 / 0
Вопрос по JTree
    #32769497
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так что - вышло или нет? А то ж интересно... Хотя - вроде должно.
...
Рейтинг: 0 / 0
Вопрос по JTree
    #32769518
ShkVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vadim RomanenkoТак что - вышло или нет? А то ж интересно... Хотя - вроде должно.

Вышло. Заработало всё :). Тока из-за чего было так и не понял. Мучался и всё получилось. Код по добавлению компонента остался прежним.
Спасибо за помощь.

У меня ещё есть вопрос по JLabel
можно ли JLabel сделать мультилайновый т. е. если текст длинный чтобы он вывелся в несколько строк (задав длинну строки и если она не помещ-ся в 1 строчку чтобы разбилось на 2 или более если надо)
...
Рейтинг: 0 / 0
Вопрос по JTree
    #32769528
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так а если не секрет - можно в студию код по определению node по правой кнопке? А то мало ли - прийдется делать, а как - зачем разбираться :)
И кстати - что помогло? Перекрытие метода toString()? Или что-то еще?
...
Рейтинг: 0 / 0
Вопрос по JTree
    #32769552
ShkVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vadim RomanenkoТак а если не секрет - можно в студию код по определению node по правой кнопке? А то мало ли - прийдется делать, а как - зачем разбираться :)
И кстати - что помогло? Перекрытие метода toString()? Или что-то еще?

код по определению node по правой кнопке
Всё очень просто
public void mouseReleased(MouseEvent e) {
if (e.isPopupTrigger()) {
TreePath treePath = tree.getPathForLocation(e.getX(), e.getY());
//U may access jtree reference from here.
//forcely select treePath
tree.setSelectionPath(treePath);
DefaultMutableTreeNode l_node = (DefaultMutableTreeNode)treePath.getLastPathComponent();
AbstractTag node = (AbstractTag)(l_node.getUserObject());
node.showContextMenu(l_node,(int)e.getPoint().getX(), (int)e.getPoint().getY());
}
где tree- JTree, то самое дерево с которым работаю.
Дело было не в toString. Компонент добавлялся, но дерево не раскрывалось и мне показалост что компонент не добавлен.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по JTree
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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