在 JavaFX 的 windows 中将单个阶段带到前面

RSl*_*wij 5 java windows javafx

我正在尝试在 JavaFX 中创建一个舞台,它可以在窗口中弹出到最前面,而主舞台保持最小化。

然而,这只适用于主舞台在屏幕上可见的情况。我曾尝试使用 Modality 使其工作,但随后用户无法与主舞台交互,这不是我想要的。

可以使用以下应用程序重现该问题:

public class MainApp extends Application {

@Override
public void start(Stage stage) throws Exception {
    Scene mainScene = new Scene(new Parent() {});
    Stage mainStage = new Stage();
    mainStage.setScene(mainScene);
    mainStage.show();
    mainStage.setIconified(true);

    Scene popUpScene = new Scene(new Parent() {});
    Stage popUpStage = new Stage();
    popUpStage.setScene(popUpScene);

    Thread.sleep(5000);
    popUp(popUpStage);
}

public static void popUp(Stage popUpStage){
    if (popUpStage.isIconified()) popUpStage.setIconified(false);
    popUpStage.show();
    popUpStage.requestFocus();
    popUpStage.toFront();       
}
Run Code Online (Sandbox Code Playgroud)

}

有没有人有这个问题的答案?

小智 9

只需将这两行添加到弹出窗口即可。第一行把它带到前面。第二行允许与主舞台或其他窗口进行交互。

popUpStage.setAlwaysOnTop(true);
popUpStage.setAlwaysOnTop(false);
Run Code Online (Sandbox Code Playgroud)

  • 这也为我解决了问题。感谢您的解决方案。尽管如此,我问自己,为什么 `Stage.toFront()` 在我的情况下不起作用...... (2认同)