JavaFX阻止了从primaryStage窃取焦点的新阶段

时间:2018-06-01 20:22:21

标签: java javafx javafx-8

有没有办法阻止新阶段从主要阶段窃取焦点?

我的意思是每个新的stage.show();抢断都集中在我的主舞台上。

我不想将我的JavaFX与Swing混合,因此没有选项可以将内容嵌入到JFrame中。 此外,不使用任何Popup,只是纯粹的舞台会很棒。

是否有允许我这样做的外部库?

1 个答案:

答案 0 :(得分:1)

您可以将监听器添加到主阶段的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();
    }
}