Получить все этапы на графе сцены JavaFX

У меня есть служебный класс, который перезагружает CSS. Чтобы получить все этапы на графике сцены, я использую

com.sun.javafx.stage.StageHelper#getStages()

В Java 9 это больше недоступно без указания --add-exports во время компиляции.

--add-exports=javafx.graphics/com.sun.javafx.stage=ALL-UNNAMED

Я ищу альтернативу StageHelper для получения всех этапов на графике сцены.

Существует общедоступный API, эквивалентный StageHelper.getStages() в Window.getWindows().

Однако между этими двумя есть небольшая разница:

StageHelper.getStages(): возвращает ObservableList, содержащий этапы, созданные на данный момент.

Window.getWindows(): возвращает список, содержащий ссылку на отображаемые в данный момент окна JavaFX.

Что я получаю от этого, так это то, что использование Window вместо StageHelper не даст мне невидимых/скрытых этапов.

В Java 8 Window.impl_getWindows() возвращает все окна и ничего не говорит о видимости.

Список всех существующих на данный момент окон

Это изменилось с Java 9 Window.getWindows()

Список всех отображаемых окон.


person DJViking    schedule 11.12.2017    source источник
comment
хм ... может быть вариант прослушать список окон и сохранить свой собственный, содержащий все. Или, может быть, перезагружайте css всякий раз, когда окно становится видимым ... нехорошо, ничего из этого ...   -  person kleopatra    schedule 11.12.2017
comment
еще один хм: а) в fx9 нет StageHelper.getStages() b) в fx8 сохраненные окна/этапы кажутся видимыми только также - они, кажется, удаляются из соответствующей очереди/списка при изменении видимости... запутано ;)   -  person kleopatra    schedule 11.12.2017
comment
Использовать новый API Window.getWindows()   -  person Valery-Sh    schedule 07.05.2018
comment
Валерий: Новый API Window.getWindows() работает только с Java 9. В Java 8 имя метода другое.   -  person DJViking    schedule 07.05.2018


Ответы (1)


Следует избегать внутреннего API и устаревших методов. Однако в Java 8 нет возможности использовать их, если вам нужно получить все этапы графа сцены.

Решение, когда вам нужна поддержка Java 8:

com.sun.javafx.stage.StageHelper.getStages()

Это может работать с Java 9, указав --add-exports в качестве аргумента командной строки для java.

--add-exports=javafx.graphics/com.sun.javafx.stage=ALL-UNNAMED


Избегайте использования Window.impl_getWindows(), так как он не будет работать на Java 9.
Имя метода и возвращаемое значение отличаются

Ява 8:

Iterator<Window> itr = Window.impl_getWindows();

Ява 9:

List<Window> windows = Window.getWindows();


Решение для Java 9:
Используйте Window.getWindows() для получения всех этапов.

Описание метода для Window.getWindows():

Возвращает список, содержащий ссылку на отображаемые в данный момент окна JavaFX.

Можно подумать, что это вернет только список видимых окон. Я проверил это, и в нем будут перечислены все окна, даже те, которые свернуты (т. Е. Невидимы). Это не то же самое, что описание говорит о показе. Это означает, что свойство display устанавливается в true после вызова stage.show().

person DJViking    schedule 07.05.2018