Получение дочерних узлов после загрузки fxml - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть эта проблема с scrollPane, где содержимое размыто. Мне удалось исправить это следующим образом:

        Node scrollPaneSkin = menuScroll.getChildrenUnmodifiable().get(0);
        scrollPaneSkin.setCache(false);

Я беру первый дочерний элемент scrollPane, который является scrollPaneSkin, и устанавливаю его кеш в false, но когда я делаю это в initialize (), узел по-прежнему не отображается или что-то, потому что я получаю NullPointerException.Так что я делаю это по временной шкале:

    Timeline timeline = new Timeline(new KeyFrame(Duration.millis(15),event -> {
        Node scrollPaneSkin = menuScroll.getChildrenUnmodifiable().get(0);
        scrollPaneSkin.setCache(false);
    }));
    timeline.play();

И это работает, но я чувствую, что есть лучший способ сделать это.То же самое происходит, если я пытаюсь получить сцену узла из fxml в initialize ().Как я могу получить детей сразу в методе initialize ()?

1 Ответ

0 голосов
/ 26 февраля 2019

Вы должны делать это через слушателей, а не пытаться ждать определенное количество времени.То, что вы слушаете, зависит от вас.Один из вариантов - прослушать свойство skin ScrollPane.

public class Controller {

    @FXML private ScrollPane sp;

    @FXML
    private void initialize() {
        // may want to remove the listener once it does its job
        sp.skinProperty().addListener((obs, ov, nv) -> {
            if (nv != null) {
                sp.getChildrenUnmodifiable().get(0).setCache(false);
            }
        });
    }

}

. Другой вариант - прослушать дочерние элементы ScrollPane и реагировать при добавлении соответствующего узла.Глядя на исходный код, узел является анонимным подклассом StackPane, чей класс стилей "viewport".

Обратите внимание, что этот код зависит как от ScrollPane, используя ScrollPaneSkin в качестве обложки, так и от внутреннего.реализация ScrollPaneSkin.Будьте осторожны, если вы меняете скин, что можно сделать с помощью кода, FXML или CSS.И будьте осторожны при изменении версий JavaFX;Я попробовал приведенный выше пример с использованием Java 8u202, хотя это не выглядит как что-то значимое, измененное JavaFX 11.0.2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...