JavaFX 2.2 舞台始终置顶

18

我有一个普通的JFrame(应用程序的一部分)和第二个JavaFX窗口(我不能使用JFrame作为JavaFX阶段)。问题是JavaFX窗口应该始终在所有其他窗口的上方。

我不知道该如何解决这个问题!有什么建议吗?


JavaFX-Jira中有一个功能请求,但不幸的是,该问题的最新评论是在2011年。我希望对于这样一个看似微不足道的功能,事情能够更快地推进。 - a.b
这个人说得一点都没错。https://dev59.com/wXDYa4cB1Zd3GeqPBo0a - Howard J
4个回答

36

我知道这是一个旧的帖子,但事情不断变化。到了JDK 8u20,有一个新方法primaryStage.setAlwaysOnTop(true);

这将是使舞台始终位于顶部最简单的方法。要提前访问8u20,请访问网站

public class KeyholeDemo extends Application {
    @Override public void start(Stage primaryStage) {
        primaryStage.initStyle(StageStyle.TRANSPARENT);
        primaryStage.setAlwaysOnTop(true);

        // code omitted...
    }

    public static void main(String[] args) {
        launch(args);
    }
}

从这篇不错的文章中摘取的示例代码


这是我的方式,对我很有效。stage.initModality(Modality.APPLICATION_MODAL) 在某些情况下也可以工作,但舞台仍然会在任务栏后面。 - Lalith J.

14

我现在有一个类似的问题。

我使用这行代码来实现始终置顶的效果:

stage.initModality(Modality.APPLICATION_MODAL);

对我来说它很好用。

这里是文档


谢谢,伙计。这对我也起作用了。方法有点奇怪,但似乎是唯一的简单方式。问候。 - codepleb
非常感谢!通过提供这段代码,您节省了很多的工作量!! - Ajit Singh

2

像这样(我正在使用Alert)

 Stage stage = (Stage) alert.getDialogPane().getScene().getWindow();
 stage.setAlwaysOnTop(true);

如果您希望它始终位于其他窗口之上,只需进行以下设置:
alert.initModality(Modality.APPLICATION_MODAL);

1
据我所知,目前没有API可以使JavaFX舞台始终保持在最上层。但是您可以使用JFXPanel将JavaFX场景放置在JFrame中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接