Событие действия элемента дерева Javafx
22582 просмотра
3 ответа
Я пытаюсь создать меню с помощью TreeView. Это первый раз, когда я использую treeView и читал об этом на нескольких сайтах.
У меня есть некоторые проблемы, когда дело доходит до события. То, что я хочу сделать, это в основном вызывать и генерировать события, когда пользователь щелкает узел в древовидной структуре, пока у меня есть следующее:
TreeItem<String> rootItem = new TreeItem<String>("Navigation");
TreeItem<String> statistics = new TreeItem<String>("Statistics");
TreeItem<String> clan = new TreeItem<String>("Clan page");
clan.addEventHandler(MouseEvent, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
// TODO Auto-generated method stub
}
});
rootItem.getChildren().add(statistics);
rootItem.getChildren().add(clan);
TreeView<String> tree = new TreeView<String>(rootItem);
К сожалению, это не похоже на работу.
Могу ли я добавить clicklistener
или даже actionlistener
к отдельным элементам в моем, treeView
не меняя treeItems
тип Button
?
Ответы (3)
6 плюса
Согласно документации JavaFX 2.2 :
«..a TreeItem не является узлом , и, следовательно, никакие визуальные события не будут запущены для TreeItem. Чтобы получить эти события, необходимо добавить соответствующие наблюдатели в экземпляры TreeCell (через собственную фабрику ячеек)».
Я думаю, что этот пример использования TreeView
будет как-то полезен.
13 плюса
Это может быть решено путем реализации CellFactory, но я думаю, что самый простой способ это так:
1) Создайте и добавьте обработчик событий в TreeView:
EventHandler<MouseEvent> mouseEventHandle = (MouseEvent event) -> {
handleMouseClicked(event);
};
treeView.addEventHandler(MouseEvent.MOUSE_CLICKED, mouseEventHandle);
2) Обрабатывать только щелчки по узлам (а не по пробелам в TreeView):
private void handleMouseClicked(MouseEvent event) {
Node node = event.getPickResult().getIntersectedNode();
// Accept clicks only on node cells, and not on empty spaces of the TreeView
if (node instanceof Text || (node instanceof TreeCell && ((TreeCell) node).getText() != null)) {
String name = (String) ((TreeItem)treeView.getSelectionModel().getSelectedItem()).getValue();
System.out.println("Node click: " + name);
}
}
Автор: Alexandre
Размещён: 03.11.2014 01:00
6 плюса
Я не смог найти метод getPickResult в событии мыши, поэтому может быть предпочтительнее следующий, чем ответ от Алекса:
1) добавить слушателя в дерево
treeView.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> handle(newValue));
2) обрабатывать клики, не нужно различать клики по пустому пространству и узлам
private void updateSelectedItem(Object newValue) {
System.out.println(newValue);
}
Автор: user1628407
Размещён: 05.07.2015 03:10
Вопросы из категории :
- java В чем разница между int и Integer в Java и C #?
- java Как я могу определить IP моего маршрутизатора / шлюза в Java?
- java Каков наилучший способ проверки XML-файла по сравнению с XSD-файлом?
- java Как округлить результат целочисленного деления?
- java Преобразование списка <Integer> в список <String>
- java Почему я не могу объявить статические методы в интерфейсе?
- event-handling Вызывать события C # с помощью метода расширения - это плохо?
- event-handling Нужно ли явно удалять обработчики событий в C #
- event-handling Событие LongClick также вызывает событие Click
- event-handling Понимание событий и обработчиков событий в C #
- event-handling Плохо ли не отменять регистрацию обработчиков событий?
- event-handling Система событий в Python
- javafx Щелкните правой кнопкой мыши в JavaFX?
- javafx Создание иконки на рабочем столе с использованием JWS JNLP для приложения JavaFX
- javafx Динамическое / мгновенное изменение размера в JavaFX
- javafx Каков рекомендуемый способ сделать числовое TextField в JavaFX?
- javafx Интеграция JavaFX 2.0 WebView в приложение Swing Java SE 6
- javafx JavaFX и внешние JAR-файлы