#javafx #javafx-8
#javafx #javafx-8
Вопрос:
В JavaFX 8 у меня есть несколько вкладок на панели с вкладками, эти вкладки добавляются динамически на основе некоторой логики. Содержимое вкладки загружается из FXML.
Когда вкладка активна и видна, один из узлов, присутствующих на этой вкладке, должен быть заполнен путем запуска задачи. Эта задача должна быть остановлена, если выбрана какая-либо другая вкладка. то есть, когда содержимое вкладки видно, я должен запустить задачу, и если вкладка больше не видна, мне нужно остановить задачу.
Я уже пытался прикрепить список изменений к visibleProperty одного из узлов на вкладке, но это не приводит к изменению события, как ожидалось.
Есть мысли?
Ответ №1:
Присоедините прослушиватель к selectedItem
свойству модели TabPane
выбора:
tabPane.getSelectionModel()
.selectedItemProperty()
.addListener((obs, oldTab, newTab) -> {
// if oldTab == tab with your node, stop task
// if newTab == tab with your node, start task
});
Комментарии:
1. Проблема в том, что я не знаю в коде, каким будет содержимое вкладки. т.е. Содержимое вкладки загружается динамически на основе определенных условий. Например: у меня есть 100 возможных содержимого (не узлов, а 100 разных FXML) для определенных вкладок, и я могу загрузить 1 из 100. Конечно, я могу добавить дополнительную логику, чтобы выяснить, присутствует ли конкретный FXML, но мой вопрос более общий и не специфичен для вкладок: есть ли способ запросить узел, чтобы узнать, отображается ли он в данный момент на экране? Таким образом, я могу использовать контроллер FXML для запуска задачи