在JFXPanel中嵌入JavaFX Stage(Swing Embed)

时间:2013-12-05 23:35:35

标签: java swing javafx

我正在尝试修改现有的JavaFX GUI程序,使其具有“始终保持最佳状态”的功能。目前JavaFX不支持这一点(为什么!?!?),所以一些谷歌搜索让我相信我必须将Swing与我的JavaFX应用程序结合才能实现这一目标。不理想,但还行。

我发现的所有示例模式都使用JFXPanel而不是Stage,但是因为我的应用程序已经存在并且从一开始就使用JavaFX编写(目前零Swing在代码库中) ,从应用程序中删除Stage开始成为一个主要的重写,只是为了支持这个“在顶部”功能。

如何在Stage或类似内容中嵌入现有JavaFX JFXPanel,这将允许我使用标准getSomeSwingWindowOrPanel().setAlwaysOnTop(true);并使我的应用程序浮动在所有其他窗口之上预期?我是不是错了,即。是否有更好的方法,如使用JNI或其他东西?

2 个答案:

答案 0 :(得分:1)

Java 8u20中的阶段添加了setAlwaysOnTop()方法。

  

public final void setAlwaysOnTop(boolean value)

     

设置属性alwaysOnTop的值。

     

物业描述:

     

定义此舞台是否保持在其他窗口之上。   如果某个其他窗口已经始终在顶部,那么这些窗口之间的相对顺序是未指定的(取决于平台)。

     

如果存在安全管理器,应用程序之间的行为会有所不同。具有权限的应用程序可以在舞台上设置“always on top”标志。在没有适当权限的应用程序中,将忽略设置标志的尝试,并且属性值将恢复为“false”。

     

该属性是只读的,因为它可以由底层平台在外部进行更改,因此不能绑定。

     

默认值:

     

     

<强>时间:

     

JavaFX 8u20

答案 1 :(得分:0)

  

我发现的所有示例模式都使用JFXPanel而不是Stage,但是因为我的应用程序已经存在并且从一开始就使用JavaFX编写(此时Swing在代码库中为零),所以从应用程序中删除Stage成为一个重要的重写只是为了支持这个“在顶部”的功能。

添加“始终保持最佳状态”功能(不删除舞台)的更好方法是: -

<强> stage.initModality(Modality.APPLICATION_MODAL); 即可。

我希望它对你有用........

干杯

[1] http://docs.oracle.com/javafx/2/api/javafx/stage/Stage.html