32

我们可以使用一个列表来初始化窗口图标Window.setIconImages(List<? extends Image>)。中通常使用的不同大小的图标是JFrame什么?

代码

此代码将 64 个不同大小的图像(从 16x16,以 2 递增)转换为列表的图标。

import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.Vector;
import javax.swing.*;
import javax.swing.border.EmptyBorder;

public class FrameIconList {

    public static BufferedImage getImage(int size, Color color) {
        BufferedImage i = new BufferedImage(
                size, size, BufferedImage.TYPE_INT_RGB);

        Graphics2D g = i.createGraphics();

        g.setColor(color);
        g.fillRect(0, 0, size, size);
        g.setColor(Color.BLACK);
        int off = (size>17 ? 3 : 1);
        if (off>1) g.drawRect(0, 0, size-1, size-1);
        g.drawString("" + size, off, size-off);

        g.dispose();

        return i;
    }

    public static void main(String[] args) {
        final Color[] colors = {
            Color.GREEN,
            Color.RED,
            Color.YELLOW,
            Color.WHITE,
            Color.CYAN,
            Color.MAGENTA,
            Color.PINK,
            Color.ORANGE
        };

        int s = 64;
        final int[] sizes = new int[s];
        
        for (int ii=0; ii<sizes.length; ii++) {
            sizes[ii] = 16+(ii*2);
        }

        Runnable r = new Runnable() {

            @Override
            public void run() {
                // the GUI as seen by the user (without frame)
                JPanel gui = new JPanel(new BorderLayout());
                gui.setBorder(new EmptyBorder(2, 3, 2, 3));
                gui.setBackground(Color.WHITE);
                
                ArrayList<BufferedImage> images = new ArrayList<BufferedImage>();
                Vector<ImageIcon> icons = new Vector<ImageIcon>();
                for (int ii=0; ii< sizes.length; ii++) {
                    BufferedImage bi = getImage(
                            sizes[ii], 
                            colors[ii%colors.length]);
                    images.add(bi);
                    ImageIcon imi = new ImageIcon(bi);
                    icons.add(imi);
                }
                JList list = new JList(icons);
                list.setVisibleRowCount(6);
                gui.add(new JScrollPane(list));

                JFrame f = new JFrame("Icon size usage");
                f.setIconImages(images);
                f.add(gui);
                // Ensures JVM closes after frame(s) closed and
                // all non-daemon threads are finished
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                // See http://stackoverflow.com/a/7143398/418556 for demo.
                f.setLocationByPlatform(true);

                // ensures the frame is the minimum size it needs to be
                // in order display the components within it
                f.pack();
                // should be done last, to avoid flickering, moving,
                // resizing artifacts.
                f.setVisible(true);
            }
        };
        // Swing GUIs should be created and updated on the EDT
        // http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html
        SwingUtilities.invokeLater(r);
    }
}
4

6 回答 6

34

此基于 Windows 7 的 PC 的典型视图

注意:@bobbel 报告 Windows 10 使用相同的大小。

框架 - 20x20

图标大小使用 - 显示 20x20 框架图标

任务栏 - 任务栏本身的 40x40,悬停应用显示 20x20

图标大小使用 - 任务栏

Windows+标签 - 20x20

图标大小使用 - Windows+Tab

Alt+Tab - 右下角 40x40,左上角缩小 20x20。

图标大小用法 - Alt+Tab

任务管理器 - 20x20

图标大小使用 - 任务管理器

于 2013-08-14T05:56:52.283 回答
13

@mKorbel Huh .. 没有意识到那里会有区别。好吧,用户/操作系统的偏好决定了程序员的期望!;)

  • 答案仅关于 Win8(ent, 64b ....)/WinXP(未提及,但设置非常相似)

  • 还有其他选项请参阅错误或功能: @kleopatra 等为 Win6+ 提供的 Swing 默认 gui 字体不正确

  • 可以在win8的桌面上设置64x64图标

  • 例如我的设置(不是高级图形个性化,尽管我是 Win2008/12 管理员,blablabla-“使用相反的配色方案,现在只使用黑色和橙色” -end blablabla

在此处输入图像描述

  • 生成

在此处输入图像描述

  • 标准设置(仅未标记的使用小任务栏按钮)

在此处输入图像描述

  • 你在我屏幕上的窗口

在此处输入图像描述

于 2013-08-14T07:15:28.033 回答
12

在 Mac OS X 10.9 (Mavericks) 中运行时似乎没有 Frame 或 Dock 图标:

Mac OS X 10.9 (Mavericks) 中缺少 Java Swing 图标

此外,活动监视器中没有图标:

在此处输入图像描述

于 2014-02-21T21:18:57.520 回答
11

Ubuntu 12.04 LTS

任务栏图标大小可以在 32 和 64 之间更改,但始终使用 32x32 图标。我也重新编译了程序,但一直使用相同的图标。

任务栏和窗口(窗口没有图标)。

在此处输入图像描述

Alt + Tab

在此处输入图像描述

任务管理器没有图标

于 2014-02-22T22:37:21.623 回答
3

这是我在 Windows 10 上的结果,它取决于屏幕缩放:

100% 时:框架 - 16x16 任务栏 - 32x32

125% 帧 - 20x20 任务栏 - 40x40

150% 帧 - 24x24 任务栏 - 48x48

175% 帧 - 28x28 任务栏 - 56x56

200% 帧 - 32x32 任务栏 - 64x64

于 2021-01-15T15:50:53.047 回答
2

我在Win10上发现了一个有趣的事情(Win7和Win8也可能如此,但我还没有尝试过)。

默认情况下,Win10 将使用 20x20(小)和 40x40(大)的图像尺寸。

那么,如果你让你的图像尺寸从22开始呢?它将使用30x30(小)和40x40(大)的图像尺寸!

生成它的整个表格会显示有趣的行为(测试的起始尺寸之间的测试会产生以前的尺寸;因此4也会产生20x2040x40):

如果从2开始,它将使用20x2040x40
如果您从22开始,它将使用30x3040x40
如果您从32开始,它将同时用于40x40
如果您从42开始,它将同时用于60x60
如果从62开始,它将使用78x7880x80
如果您从80开始,它将同时用于80x80
如果你从82开始,它将使用98x98120x120
如果从100开始,它将使用100x100120x120
如果从102开始,它将使用118x118120x120
如果您从120开始,它将同时用于120x120
如果从122开始,它将使用138x138158x158
……好吧,这就够了……

我并没有真正理解背后的模式,但我发现它非常有趣......

最后,您提供的尺寸完全取决于您。每个操作系统都有自己的逻辑来显示特定的图标。如果您不为每个操作系统提供确切的图像大小,它将按比例放大或缩小。

于 2015-12-06T22:43:03.333 回答