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

标签 java javafx desktop-application

我一直在使用 JavaFX SDK 11.0.2 开发大型 Java 桌面应用程序。在我的应用程序中,我有许多不同的 Stage (s) 用于不同的功能集。现在,我想在我的应用程序中打开的每个窗口上设置图标。虽然我知道如何在舞台上设置图标,但我想知道是否有一种方法可以从代码中的一个点为我的应用程序中的所有窗口设置一个图标。

  • 是否有任何全局图标设置,或者我是否必须在我的应用程序代码的每个阶段设置图标?
  • 如果我必须为每个舞台设置图标,那么是否可以为图标定义一个 Image 对象并在每次调用 Stage.getIcons().add(image); 时将其传递给我,或者我应该每次只初始化一个 Image 对象展示舞台?
  • 最佳答案

    据我所知,没有方便的属性或方法可以设置,以便所有阶段自动具有相同的图标。那就是说...
    在 JavaFX 9 中,他们添加了 Window#getWindows() 方法。 JavaFX 8 中也有类似的方法,但它是私有(private) API。该方法返回一个包含应用程序中显示的每个窗口的可观察列表。换句话说,窗口在显示和隐藏时分别从该列表中添加和删除。你可以利用这个。例如:

    public static void installIcons(Image... icons) {
      Window.getWindows().addListener((ListChangeListener<Window>) c -> {
        while (c.next()) {
          for (Window window : c.getAddedSubList()) {
            if (window instanceof Stage) {
              ((Stage) window).getIcons().setAll(icons);
            }
          }
        }
      });
    }
    
    这将在每次显示时将舞台的图标设置为您的图标。不幸的是,它还会设置不需要设置的图标,但这不会对您的应用程序产生任何明显影响。虽然我想你可以找到一种方法来确保你只调用 setAll(icons)如果你真的需要,每个阶段一次。
    请注意,如果您所有的额外窗口都通过 Dialog 显示那么你不需要上面的。如果您设置 Dialog 的所有者它会自动从所有者那里获取图标(如果所有者是 Stage )。我不确定这是否是有保证的行为。另请注意,对话框使用幕后舞台,至少在桌面上,因此上述代码也会影响对话框。
    虽然在上面的示例中暗示了这一点,但您第二个问题的答案是:是的,您可以共享相同的 Image每个阶段的实例。

    关于java - 在 JavaFX 中为整个应用程序窗口设置图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66237267/

    相关文章:

    java - 尝试使用现有的 Logger 对象,但出现 <identifier Expected> 错误?

    java - 使用 Locale 格式化 LocalDateTime 实例时获取 java.time.DateTimeException

    java - 在 MySQL 数据库中使用 JDBC 更新数据

    java - 如何通过套接字传输多个文件而不是 1 个文件

    java - 播放多个视频JavaFx

    java - 圆圈边缘的箭头

    java - 在 FXML 文件中多次插入相同的对象 (JavaFX)

    c++ - 剪贴板数据上使用的 GlobalSize 函数导致错误

    delphi - 开发者该如何应对如此多的GUI配置组合呢?

    angularjs - Uncaught ReferenceError : ytcfg is not defined even though I won't use that as I am using yt player