Swing中使用的框架图标的大小

时间:2013-08-14 05:56:52

标签: java swing icons jframe imageicon

我们可以使用列表使用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);
    }
}

6 个答案:

答案 0 :(得分:30)

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

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

框架 - 20x20

Icon Size Usage - showing 20x20 frame icon

任务栏 - 任务栏中的40x40,悬停应用程序显示20x20

Icon Size Usage - Task Bar

Windows +标签 - 20x20

Icon Size Usage - Windows+Tab

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

Icon Size Usage - Alt+Tab

任务管理器 - 20x20

Icon Size Usage - Task Manager

答案 1 :(得分:12)

  

@mKorbel嗯..没有意识到那里会有区别。   那么,用户/操作系统偏好规则超过了程序员的期望! ;)

  • 回答只是关于Win8(ent,64b ....)/ WinXP(未提及,但设置非常类似)

  • 还有其他选择请参阅@ Bug or feature: Swing default gui font incorrect for Win6+ @kleopatra等

  • 可以在win8

  • 的桌面上设置64x64图标
  • e.g。我的设置(不是高级图形个性化,尽管事实上我是Win2008 / 12管理员,blablabla-&#34;保留了使用反色方案的确定性,现在只使用Black&amp; Orange Colors&#34; { {1}})

enter image description here

  • 产生

enter image description here

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

enter image description here

  • 我的屏幕上的窗口

enter image description here

答案 2 :(得分:11)

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

Lack of Java Swing icons in Mac OS X 10.9 (Mavericks)

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

enter image description here

答案 3 :(得分:10)

Ubuntu 12.04 LTS

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

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

enter image description here

Alt + Tab

enter image description here

任务管理员没有图标

答案 4 :(得分:2)

我在Win10上发现了一件有趣的事情(对于Win7和Win8来说也是如此,但我还没试过它。)

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

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

生成一个完整的表格显示了有趣的行为(测试的起始大小之间的测试导致以前的大小;因此 4 也会导致 20x20 40x40 < /强>):

如果您从 2 开始,它将使用 20x20 40x40
如果您从 22 开始,它将使用 30x30 40x40
如果您从 32 开始,它将同时用于 40x40
如果您从 42 开始,它将同时用于 60x60
如果您从 62 开始,它将使用 78x78 80x80
如果您从 80 开始,它将同时用于 80x80
如果您从 82 开始,它将使用 98x98 120x120
如果您从 100 开始,它将使用 100x100 120x120
如果您从 102 开始,它将使用 118x118 120x120
如果您从 120 开始,它将用于 120x120
如果您从 122 开始,则会使用 138x138 158x158 。 ......好吧这就够了......

我并没有真正掌握这种模式,但我发现它非常有趣......

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

答案 5 :(得分:1)

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

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

125% 框架 - 20x20 任务栏 - 40x40

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

175% 框架 - 28x28 任务栏 - 56x56

200% 框架 - 32x32 任务栏 - 64x64