JavaFX防止新阶段从primaryStage窃取焦点

JavaFX防止新阶段从primaryStage窃取焦点,java,javafx,javafx-8,Java,Javafx,Javafx 8,有什么方法可以防止新阶段从主阶段窃取焦点 我指的是每一个新的舞台;从我的主舞台上抢走焦点 我不想将JavaFX与Swing混用,因此没有将内容嵌入JFrame的选项。 此外,最好不要使用任何弹出窗口,只使用纯舞台 是否有任何外部库允许我这样做?您可以在主阶段的focusedProperty中添加一个侦听器,并在其失去焦点时请求焦点 import javafx.application.Application; import javafx.scene.Scene; import javafx.sce

有什么方法可以防止新阶段从主阶段窃取焦点

我指的是每一个新的舞台;从我的主舞台上抢走焦点

我不想将JavaFX与Swing混用,因此没有将内容嵌入JFrame的选项。 此外,最好不要使用任何弹出窗口,只使用纯舞台


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

您可以在主阶段的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();
    }
}

如果您在调用stage.show时引用了primaryStage,您可能可以在调用primaryStage.requestFocus后立即调用primaryStage.requestFocus。@Slaw感谢您的回复。然而,永远不要失去焦点会很好。也许有一个更好的方法来完成你想做的事情,而不是做很多阶段。拥有许多顶级窗口通常被认为是一种糟糕的设计,因为强迫用户跟踪许多窗口会降低可用性。例如,如果用户一次可能只查看一个窗口,则可以在TabPane中将其设置为选项卡。