在JavaFX中为整个应用程序窗口设置图标

在JavaFX中为整个应用程序窗口设置图标,java,javafx,desktop-application,Java,Javafx,Desktop Application,我一直在使用JavaFXSDK11.0.2开发一个大型Java桌面应用程序。在我的应用程序中,对于不同的函数集,我有许多不同的阶段。现在,我想在应用程序中打开的每个窗口上设置图标。虽然我知道如何在舞台上设置图标,但我想知道是否有一种方法可以从一个代码点为我的应用程序中的所有窗口设置一个图标 是否有任何全局图标设置,或者我是否必须在应用程序代码的每个阶段设置图标 如果我必须为每个阶段设置图标,那么可以为图标定义一个Image对象,并在每次调用Stage.getIcons().add(Image)

我一直在使用JavaFXSDK11.0.2开发一个大型Java桌面应用程序。在我的应用程序中,对于不同的函数集,我有许多不同的
阶段。现在,我想在应用程序中打开的每个窗口上设置图标。虽然我知道如何在舞台上设置图标,但我想知道是否有一种方法可以从一个代码点为我的应用程序中的所有窗口设置一个图标

  • 是否有任何全局图标设置,或者我是否必须在应用程序代码的每个阶段设置图标
  • 如果我必须为每个阶段设置图标,那么可以为图标定义一个
    Image
    对象,并在每次调用
    Stage.getIcons().add(Image)时传递它还是应该在每次显示阶段时初始化图像对象

我还没有尝试过,但是您可以使用属性并使用Stage on Showing event来定义特定图标。

据我所知,没有方便的属性或方法可以设置为所有阶段自动具有相同的图标。也就是说

在JavaFX9中,他们添加了这个方法。JavaFX8中也有类似的方法,但它是私有API。该方法返回一个可观察列表,其中包含应用程序中显示的每个窗口。换句话说,当窗口分别显示和隐藏时,会在此列表中添加和删除窗口。你可以利用这个。例如:

publicstaticvoid安装图标(图像…图标){
Window.getWindows().addListener((ListChangeListener)c->{
while(c.next()){
对于(窗口:c.GetAddedPublist()){
if(后台窗口实例){
((舞台)窗口).getIcons().setAll(图标);
}
}
}
});
}
这将在每次显示时将舞台图标设置为您的图标。不幸的是,它也会设置不需要设置的图标,但这不会对应用程序产生任何明显的影响。尽管我认为您可以找到一种方法,确保在确实需要的情况下,每个阶段只调用
setAll(icons)
一次

请注意,如果所有额外窗口都是通过
对话框显示的,则不需要上述内容。如果设置
对话框的所有者
,它将自动从所有者那里获取图标(如果所有者是
阶段
)。我不确定这是否是保证行为。还要注意的是,对话框至少在桌面上使用后台,所以上面的代码也会影响对话框


虽然上面的例子暗示了这一点,但第二个问题的答案是:是的,每个阶段都可以共享相同的
Image
实例。

只是对问题第二部分的评论:javadoc可能是你的朋友:)到目前为止,我认为这是解决我问题的唯一最接近的方法。非常感谢你的解释。