如何为 JavaFX 应用程序的窗口设置图标?

问题描述 投票:0回答:2

我在 Netbeans 上制作了一个 JavaFX 应用程序,并将这段代码用于设置窗口的图标

primaryStage.getIcons().add(new Image("file:sicadcam.png"));

当我从 Netbeans 运行项目时,它工作正常:图标出现在窗口的左上角和任务栏中。图像在项目的根目录中。

当我清理并构建项目时,它会生成两个安装程序:一个 exe 和一个 msi;当我安装应用程序并打开它时,窗口没有图标 sicadcam.png,它有默认的 java 徽标图标。

如何或在哪里设置图像的路径,以便在安装应用程序时出现图标。

netbeans window icons javafx
2个回答
3
投票

图标可以显示在不同的地方(例如,在任务栏或停靠栏中,在安装程序中,或在已安装的应用程序设置管理器操作系统中)。它们显示的位置和方式取决于操作系统。

JavaFX 对图标的内置支持非常有限。

如果你有一个有标题的舞台,你可以从舞台上获取图标并在那里添加一个图像以形成一个显示在舞台标题旁边的图标。这不像看起来那么有用,因为图标唯一可见的地方是在窗口框架中,而不是在停靠栏或任务栏或安装程序、程序管理器或应用程序商店中。现代 OS X 应用程序通常不会在其窗口标题栏中显示图标,因此,从某种意义上说,至少对于 OS X 而言,将图标放置在标题区域有点像 OS X 上的 UI 反模式。

让应用程序的图标显示在操作系统将显示的标准位置的最佳方法是使用诸如

jpackage
之类的工具来构建包含所需图标的可安装应用程序包(在推荐的各种操作系统中安装包中的尺寸和格式)。这样做的方式和方式是复杂的和特定于平台的,我建议查阅
jpackage
文档和关于应用程序图标的特定于操作系统的建议。安装包中包含应用程序图标的打包过程不是 JavaFX API、框架和工具集的一部分。
jpackage
是所有现代 JDK 附带的标准工具(例如 JDK 17+.

这个答案的其余部分基本上已经过时和过时,但由于历史原因而被保留。


这只是问题的部分答案,因为我一直无法生成一个独立的包,它在 Windows 任务栏中显示已安装应用程序的图标。我可能错过了一个步骤,有环境问题,或者独立应用程序的图标配置可能有轻微错误,可能会在以后的版本中修复。测试在:jdk7u21、NetBeans 7.3、Win7、InnoSetup。

从资源而不是文件中获取图标图像。

例如,如果您将图像放在应用程序类的源目录中:

new Image(MyApplication.class.getResource("sicadcam.png").toExternalForm());

对于已安装的应用程序,这只会设置显示在屏幕左上角的图标。要设置任务栏、桌面等的图标,请按照 JavaFX 部署指南独立打包部分中的说明进行操作。

例如,要在我的 Windows 7 上为我的独立应用程序获取安装程序的图标,我需要将该图标放在

<netbeansprojectdir>/package/windows/<myappname>.ico
(需要是 .ico 以便安装程序打包程序将其拾取)文件中,并且确保我的 ant 路径配置正确,详见如何更改 JavaFx 本机 Bundle exe 图标(希望在以后的 NetBeans/JavaFX 版本中不需要手动配置 ant)。


从 Oracle 下载 Ensemble 示例应用程序 并查看包目录是如何为特定于平台的图标布置的。不幸的是,当我尝试从命令行构建 Ensemble 时,当 Ensemble 作为独立应用程序安装和执行时,我也无法让 Windows 7 使用任务栏中的 Ensemble 图标。


确保您的构建系统将您的图标复制到包含您的应用程序的 jar 文件中。要检查这一点,请切换到已安装应用程序的应用程序目录并运行

jar tvf <yourappjar>.jar
=> 它应该显示图标资源文件在 jar 中的位置。


0
投票

你可以使用 getClass().getResourceAsStream("path.png") getResourceAsStream("path") 返回一个输入 stram,用于您需要它的任何文件的路径,例如图标 win.getIcons().add(新图像(getClass().getResourceAsStream("path.png"))); 如果你正在制作一个 jar 文件,则运行时没有异常

© www.soinside.com 2019 - 2024. All rights reserved.