Размеры значков кадров, используемых в Swing

Мы можем использовать список для инициализации значков окна с помощью 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);
    }
}

Ответ 1

Типичные представления для ПК на базе Windows 7

Примечание. @bobbel сообщает, что те же размеры используются для Windows 10.

Рамка - 20x20

Icon Size Usage - showing 20x20 frame icon

Панель задач - 40x40 в самой панели задач, приложение hover показывает 20x20

Icon Size Usage - Task Bar

Windows + Tab - 20x20

Icon Size Usage - Windows+Tab

Alt + Tab - 40x40 в правом нижнем углу, усеченный 20x20 в левом верхнем углу.

Icon Size Usage - Alt+Tab

Диспетчер задач - 20x20

Icon Size Usage - Task Manager

Ответ 2

@mKorbel Huh.. не понимал, что там будет разница. Ну, правила предпочтений пользователей/ОС над программистским ожиданием!;)

  • Ответ только о Win8 (ent, 64b....)/WinXP (не упоминается, но настройка довольно похожа)

  • есть другие варианты, см. Ошибка или функция: Swing default gui font неверен для Win6 + @kleopatra и т.д.

  • можно установить значок 64x64 на рабочем столе в win8

  • например. мой настрой (не расширенные графические персонализации, несмотря на то, что я Win2008/12 admin, blablabla- ", оставляя верность с измененной цветовой схемой, теперь только с черными и оранжевыми цветами" -end blablabla)

enter image description here

  • генерации

enter image description here

  • стандартная настройка (только без знака Используйте маленькие кнопки на панели задач)

enter image description here

  • ваше окно на моем экране

enter image description here

Ответ 3

Кажется, что в Mac OS X 10.9 (Mavericks) нет значков Frame или Dock:

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

Кроме того, ни один значок в Activity Monitor:

enter image description here

Ответ 4

Ubuntu 12.04 LTS

Размер значка панели задач можно изменить от 32 до 64, но все время используется значок 32x32. Я также перекомпилировал программу, но продолжаю использовать один и тот же значок.

Панель задач и окно (в окнах отсутствует значок).

enter image description here

Alt + Tab

enter image description here

нет значка в диспетчере задач

Ответ 5

Я узнал интересную вещь на 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.
... ладно, этого достаточно...

Я действительно не получаю шаблон позади, но я нашел его очень интересным...

В конце концов, это действительно зависит от вас, какие размеры вы предоставляете. Каждая ОС имеет свою собственную логику для отображения определенных значков. Либо он будет масштабироваться вверх или вниз, если вы не предоставите точные размеры изображений для каждой ОС.