有没有办法在 JFrame 和 Windows 任务栏上使用不同的图标?
当我设置 JFrame.setIconImage(img) 时,这个相同的图像用作 Windows 图标。我可以对 JFrame 和 Windows 任务栏使用不同的图标吗?
这项工作在运行标准 Java 7 的 Windows 7 中:
List<Image> icons = new ArrayList<Image>();
icons.add(new ImageIcon("16.png").getImage());
icons.add(new ImageIcon("32.png").getImage());
f.setIconImages(icons);
图标必须正好是16x16 和 32x32。
您可以使用 setIconImages() 提供不同大小的图标列表。JRE 将为每次使用选择最佳可用尺寸(因此,当图标以较大尺寸显示时,可以显示更详细的版本)。
AFAIK 没有计划的方式来显示特定用途的不同图标。
您可以使用 setUndecorated(true) 并自己渲染窗户装饰,但要使其按预期工作并非易事(由于外观和感觉)。一个 hacky 解决方案可能是通过窗口对等组件(在运行时使用 JDK 源 + 反射)找到您的方式,并为一个或另一个对等组件提供不同的图标。同样,这可能需要特定于活动 L&F 的代码。
我无法使用建议的解决方案,因为我有 jdk 1.5 作为要求...
所以,我这样做了:
public void setAppIcons(JFrame frame) {
List<Image> images = new ArrayList<Image>();
images.add(getImage(MessageUtils.getString("application.images.icon.app.32")).getImage());
images.add(getImage(MessageUtils.getString("application.images.icon.app.16")).getImage());
try {
Class<?> [] types = {java.util.List.class};
Method method = Class.forName("java.awt.Window").getDeclaredMethod("setIconImages", types);
Object [] parameters = {images};
method.invoke(frame, parameters);
} catch (Exception e) {
frame.setIconImage(images.get(0));
}
}
如果客户端在 jre 1.6 或major 中运行应用程序,应用程序将选择要设置的图像列表...
谢谢你的建议。