JavaSwing中如何使用系统默认图标包?

How use system default icons pack in Java Swing?

我想在我的 Java 应用程序中使用我的 OS (kali linux gnome) 的默认图标。我不知道是否需要导入整个图标包,或者我是否只使用一些 java swing 方法。 你能向我解释一下如何进行吗?

最简单的方法是直接使用图标文件:

Icon icon = new ImageIcon("/usr/share/icons/Adwaita/32x32/actions/document-open.png");

但实际上,图标比这更复杂。 a whole specification 说明了图标主题的工作原理。它包括一个适度复杂的算法,用于按类型和大小匹配所需的图标。

Java SE 无法读取我所知道的 SVG 图像,因此您要么需要为 Java 找到一个健壮、稳定的 SVG 库,要么您需要忽略一个主题的可扩展目录。

我知道获取最终用户当前图标主题的唯一方法是使用如下命令:

ProcessBuilder builder = new ProcessBuilder(
    "gsettings", "get", "org.gnome.desktop.interface", "icon-theme");
builder.redirectError(ProcessBuilder.Redirect.INHERIT);

String themeName;
Process iconThemeCommand = builder.start();
try (InputStream commandOutput = iconThemeCommand.getInputStream()) {
    themeName = new String(commandOutput.readAllBytes()).trim();
}
iconThemeCommand.waitFor();

还有multi-platform的问题。显然 Windows 和 OSX 不会有 /usr/share/icons/Adwaita 目录。您可以将图标主题树与您的应用程序捆绑在一起,但它可能是在 GPL 或类似许可下,因此您必须在该许可下发布您的软件(或者根本不发布)并在您的程序中包含该许可的副本, 并通知用户从哪里获得您的程序源代码。

不完全确定这是否是您要问的,但这些将设置外观 OS 具体:

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());