Swing中使用的框架图标的大小
我们可以使用一个列表来初始化使用Window.setIconImages(List<? extends Image>)
的窗口图标。 在JFrame
通常使用的不同大小的图标是什么?
码
此代码将64个不同大小的图像(从16×16,增加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); } }
这个基于Windows 7的PC的典型视图
注意:@bobbel报告在Windows 10中使用相同的大小。
帧 – 20×20
任务栏 – 40×40任务栏本身,hover应用程序显示20×20
Windows + Tab – 20×20
Alt + Tab – 右下angular40x40,左上angular缩小20×20。
任务pipe理器 – 20×20
@mKorbel呃..没有意识到那里会有差别。 那么,用户/操作系统偏好规则超过程序员的期望! ;)
-
答案只是关于Win8(ent,64b ….)/ WinXP(未提及,但设置相当类似)
-
还有另外一个选项,请参阅Bug或function:Swing默认gui字体对于Win6 +而言是不正确的@kleopatra等
-
可以在win8上设置桌面上的64×64图标
-
例如我的设置(尽pipe事实上我是Win2008 / 12pipe理员,
blablabla-
“使用反向配色scheme的现实主义,现在只有黑色和橙色)”(不包括高级graphics个性化)
- 发电
- 标准设置(只有未标记使用小任务栏button)
- 你的窗口在我的屏幕上
在Mac OS X 10.9(Mavericks)中运行时似乎没有Frame或Dock图标:
另外,Activity Monitor中没有图标:
Ubuntu 12.04 LTS
任务栏图标大小可以在32到64之间更改,但是一直使用32×32图标。 我也重新编译了这个程序,但是一直使用相同的图标。
任务栏和窗口(窗口没有图标)。
Alt + Tab
在任务pipe理器没有图标
我在Win10上发现了一个有趣的事情(对于Win7和Win8也是如此,但我还没有尝试过)。
默认情况下,Win10将使用20×20(小)和40×40(大)的图像大小。
那么,如果你让图像大小在22 ? 它将使用图像尺寸30×30 (小)和40×40 (大)!
生成一个完整的表格显示有趣的行为(testing之间的起始大小之间的testing结果以前的大小,所以4也将导致20×20和40×40 ):
如果从2开始,它将使用20×20和40×40 。
如果你从22开始,它将使用30×30和40×40 。
如果你从32开始,它将用于40×40 。
如果你从42开始,它将同时用于60×60 。
如果你从62开始,它将使用78×78和80×80 。
如果从80开始,它将用于80×80 。
如果你从82开始,它将使用98×98和120×120 。
如果你从100开始,它将使用100×100和120×120 。
如果你从102开始,它将使用118×118和120×120 。
如果你从120开始,它将用于120×120 。
如果你从122开始,它将使用138×138和158×158 。
…好吧,这已经足够了…
我并没有真正掌握这种模式,但是我发现它非常有趣。
最后,这是真的取决于你,你提供的大小。 每个操作系统都有自己的逻辑来显示特定的图标。 如果您不为每个操作系统提供确切的图像大小,它将被放大或缩小。