Swing 中使用的框架图标的大小此基于 Windows 7 的电脑的典型视图

2022-09-01 09:24:09

我们可以使用列表来初始化窗口图标,使用Window.setIconImages(List<? extend 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);
    }
}

答案 1

此基于 Windows 7 的电脑的典型视图

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

相框 - 20x20

Icon Size Usage - showing 20x20 frame icon

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

Icon Size Usage - Task Bar

窗口+选项卡 - 20x20

Icon Size Usage - Windows+Tab

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

Icon Size Usage - Alt+Tab

任务管理器 - 20x20

Icon Size Usage - Task Manager


答案 2

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

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

  • 还有其他选项,请参阅错误或功能:Swing默认gui字体不正确,用于Win6 +由@kleopatra等

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

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

enter image description here

  • 生成

enter image description here

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

enter image description here

  • 我的屏幕上的窗口

enter image description here


推荐