JavaFX предотвращает кражу фокуса новыми этапами у primaryStage - PullRequest
0 голосов
/ 01 июня 2018

Есть ли какой-нибудь способ предотвратить кражу фокуса новыми сценами с основной сцены?

Я имею в виду, что каждый новый stage.show(); крадет фокус у моей основной сцены.

Я не хочусмешайте мой JavaFX с Swing, чтобы не было возможности встраивать контент в JFrame.Кроме того, было бы здорово не использовать никакие всплывающие окна, просто чистую сцену.

Есть ли какая-либо внешняя библиотека, которая позволяет мне это делать?

1 Ответ

0 голосов
/ 01 июня 2018

Вы можете добавить слушателя к focusedProperty вашей основной стадии и запрашивать фокус всякий раз, когда он теряет фокус.

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class StageFocus extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        final Button button = new Button("New Stage");
        button.setOnAction(e -> {
            final Stage stage = new Stage();
            stage.setWidth(200);
            stage.setHeight(200);
            stage.setTitle("New Stage");
            stage.show();
        });
        final Scene scene = new Scene(new StackPane(button), 300, 300);
        primaryStage.focusedProperty().addListener((observable, oldValue, newValue) -> {
            if (!newValue) {
                primaryStage.requestFocus();
            }
        });
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}
...