Я пытаюсь обойти эту ошибку в 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:
Этап всегда будет находиться над его родительским окном.
Итак, что было бы обходным путем, которое делает всплывающее окно "всегда сверху" и минимизируемым?