В моем приложении у меня есть несколько независимых (не модальных) этапов.Переведите все этапы на переднюю часть
Я хотел бы следующее поведение:
- , когда основной этап сводится к минимуму, все остальные этапы должны быть сведены к минимуму
- , когда основной этап является не-минимизированы, все остальные этапы должны быть просто не сведены к минимуму
- , когда любой из стадий выбран, если некоторые другие этапы не видны (скрытые за другими приложениями, например), они должны быть доведены до фронта
фИ Первые два требования легко (если я не пропустил что-то), что-то вроде:
mainStage.iconifiedProperty().addListener((observable, oldValue, newValue) -> {
if (newValue != null && newValue != oldValue) {
for (Stage s : otherStages) { s.setIconified(newValue); }
}
});
Однако я застрял на третьем. Я попытался использовать focusedProperty
, но он не работает (если я нажму на меню на одном из этапов, например, потому что он сначала выводит другие сцены на передний план, он теряет фокус, и меню не открывается) .. .
//do this for each stage
stage.focusedProperty().addListener((observable, oldValue, newValue) -> {
if (Boolean.TRUE.equals(newValue) && newValue != oldValue) {
for (Stage s : otherStages) {
s.setIconified(false);
s.toFront();
}
//request the focus back, but that creates issues
stage.requestFocus();
}
});
Любые идеи о том, как реализовать третье требование?
Из документации Oracle https://docs.oracle.com/javase/8/javafx/api/javafx/stage/Stage.html#initOwner-javafx.stage.Window- «стадия может необязательно иметь владельца Окно Когда окно является владельцем сцены, он считается родителем этого этапа. Когда родительское окно закрыто, все его потоки потомков закрыты. То же самое связанное поведение применяется для родительского окна, которое обозначено. всегда будет находиться поверх своего родительского окна. Владелец должен быть инициализирован до того, как сцена станет видимой ». – Linuslabo