Я пытаюсь обойти эту ошибку в jdk: http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8088624
public class Blubb extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
Button btn = new Button("Click");
btn.setTooltip(new Tooltip("Blubb"));
Scene scene = new Scene(new BorderPane(btn), 320, 240);
primaryStage.setScene(scene);
primaryStage.show();
Stage secondStage = new Stage();
secondStage.setScene(new Scene(new BorderPane(new Button("Click")), 320, 240));
//secondStage.initOwner(primaryStage);
secondStage.show();
}
}
Если кнопка на основной ступени зависнет, она появится перед вторым этапом. Я обнаружил, что вызов initOwner() на сцене устраняет это поведение.
Теперь моя проблема следующая: у меня есть несколько "всплывающих окон", которые имеют общего владельца (основной этап). Наведение курсора на элементы управления на первичной стадии не вызывает неожиданного поведения после обходного пути initOwner(). Если вы, однако, нависаете над элементами управления во всплывающем окне, а другое всплывающее окно находилось в фокусе, зависающее всплывающее окно будет красть фокус.
Есть ли способ обойти эту ошибку не только для основного этапа, но и для всплывающих окон?
UPDATE. Оказывается, у моего обходного пути есть нежелательные побочные эффекты. Javadocs для состояния Stage:
Этап всегда будет находиться над его родительским окном.
Итак, что было бы обходным путем, которое делает всплывающее окно "всегда сверху" и минимизируемым?