JavaFX8 запуск события, если узел отображается на экране

#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 для запуска задачи