我想有一个图标被添加并显示使用Java系统托盘中。 然而图标总是要么太小,或者它在区域切断。 它从左边第二个的情况下,你能不能告诉。
我在做什么错在这里? 我怎样才能完全显示该图标? 什么是用于系统托盘的标准图标的大小?
编辑:我使用AWT的SystemTray和任务栏图标
我想有一个图标被添加并显示使用Java系统托盘中。 然而图标总是要么太小,或者它在区域切断。 它从左边第二个的情况下,你能不能告诉。
我在做什么错在这里? 我怎样才能完全显示该图标? 什么是用于系统托盘的标准图标的大小?
编辑:我使用AWT的SystemTray和任务栏图标
检索完磁盘中的实际图像资源后,可以将其调整到你需要创建一个“假”一个在即时,并采取其宽度尺寸。
我发现这是比使用更好setImageAutoSize(true)
的方法,因为这方法不缩放图像流畅可言。
BufferedImage trayIconImage = ImageIO.read(getClass().getResource("/path/to/icon.png"));
int trayIconWidth = new TrayIcon(trayIconImage).getSize().width;
TrayIcon trayIcon = new TrayIcon(trayIconImage.getScaledInstance(trayIconWidth, -1, Image.SCALE_SMOOTH));
要显示的最佳尺寸的图标,你就需要手动调整到正确的大小。 这个正确的尺寸可以操作系统和喜好之间的不同,所以Java提供获取任务栏图标的尺寸,这是在您的示例图像的情况下,16×16的方法。
if (SystemTray.isSupported()) {
SystemTray tray = SystemTray.getSystemTray();
Dimension trayIconSize = tray.getTrayIconSize();
// resize icon image to trayIconSize
// create your tray icon off of the resized image
}
据TrayIcon.setImageAutoSize(boolean)
。
设置自动大小属性。 自动尺寸确定托盘图像是否被自动调整大小以适应分配给在托盘上的图像的空间 。 默认情况下,自动调整大小属性设置为false。
如果自动大小是假的,并且图像尺寸不匹配的托盘图标空间,图像被描绘成,是空间内-如果不是分配的空间更大,它会被裁剪。
我已经结束了合并一些答案,使我使用的代码。
这是从开始在100x100的一个PNG生产在我的系统托盘一个好看的图标。
值得一提的是在视网膜上的的MacBook的图标看上去更糟缩小。 所以我做了检查别处看它是否在Mac上运行,并且不适用这一点,如果它是。
public Image imageForTray(SystemTray theTray){
Image trayImage = Toolkit.getDefaultToolkit().getImage("my100x100icon.png");
Dimension trayIconSize = theTray.getTrayIconSize();
trayImage = trayImage.getScaledInstance(trayIconSize.width, trayIconSize.height, Image.SCALE_SMOOTH);
return trayImage;
}