Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sizes of frame icons used in Swing

We can use a list to initialise the window icons using Window.setIconImages(List<? extends Image>). What are the different sizes of icons typically used for in a JFrame?

Code

This code turns 64 different sized images (from 16x16, incrementing by 2) into icons for the list.

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);     } } 
like image 301
Andrew Thompson Avatar asked Aug 14 '13 05:08

Andrew Thompson


People also ask

How are icons managed in Java Swing?

The setIconImage() method of Frame class is used to change the icon of Frame or Window. It changes the icon which is displayed at the left side of Frame or Window. The Toolkit class is used to get instance of Image class in AWT and Swing.

Which class represents the image in Swing?

JLabel is a class of java Swing . JLabel is used to display a short string or an image icon. JLabel can display text, image or both .


1 Answers

Typical views for this Windows 7 based PC

Note: @bobbel reports the same sizes are used for Windows 10.

Frame - 20x20

Icon Size Usage - showing 20x20 frame icon

Task Bar - 40x40 in task bar itself, hover app shows 20x20

Icon Size Usage - Task Bar

Windows+Tab - 20x20

Icon Size Usage - Windows+Tab

Alt+Tab - 40x40 in lower right, shrunken 20x20 in upper left.

Icon Size Usage - Alt+Tab

Task Manager - 20x20

Icon Size Usage - Task Manager

like image 147
Andrew Thompson Avatar answered Oct 02 '22 13:10

Andrew Thompson