リストを使用して、 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);
}
}
注:@bobbelは、Windows 10で同じサイズが使用されることを報告します。
@mKorbel Huh ..そこに違いがあることに気づかなかった。さて、プログラマーの期待に対するユーザー/ OS設定ルール! ;)
答えはWin8(ent、64b ....)/ WinXP(言及されていませんが、設定はかなり似ています)についてのみです
別のオプションがありますので、参照してください バグまたは機能:Win6 +ではSwingのデフォルトのGUIフォントが正しくありません @kleopatraなど
win8のデスクトップで64x64のアイコンを設定することが可能です
例えば私の設定(高度なグラフィックパーソナライゼーションではなく、私がWin2008/12管理者であるという事実にもかかわらず、blablabla-
"反転した配色で確実性を残し、現在はブラック&オレンジ色のみ" -end blablabla
)
Mac OS X 10.9(Mavericks)で実行すると、FrameアイコンやDockアイコンがないようです。
また、アクティビティモニターにアイコンはありません:
Ubuntu 12.04 LTS
タスクバーアイコンのサイズは32〜64の間で変更できますが、常に32x32アイコンを使用します。プログラムも再コンパイルしましたが、同じアイコンを使い続けています。
タスクバーとウィンドウ(ウィンドウにアイコンはありません)。
Alt + Tab
タスクマネージャにアイコンがありません
Win10で興味深いことがわかりました(Win7とWin8にも当てはまる可能性がありますが、まだ試していません)。
デフォルトでは、Win10は20x20(小)と40x40(大)の画像サイズを使用します。
では、イメージサイズを22から開始するとどうなるでしょうか。画像サイズx(小)と40x4(大)を使用します!
テーブル全体を生成すると、興味深い動作が示されます(テストされた開始サイズ間のテストは以前のサイズになります。そのため、4も20x2および40x4になります。 ):
2から開始すると、20x2および40x4が使用されます。
22から開始すると、xおよび40x4が使用されます。
2から始めると、-40x4の両方に使用されます。
42から開始すると、60x6の両方に使用されます。
62から開始すると、78x78および80x8が使用されます。
8で開始すると、両方の80x8に使用されます。
82から開始すると、98x98および120x12が使用されます。
1から開始すると、100x1および120x12が使用されます。
102から開始すると、118x118および120x12が使用されます。
12から開始すると、両方の120x12に使用されます。
122から開始すると、138x138および158x158が使用されます。
...大丈夫これで十分です...
私は本当にパターンを後回しにしていませんが、それは非常に興味深いと思いました...
最終的には、提供するサイズは実際にあなた次第です。すべてのOSには、特定のアイコンを表示する独自のロジックがあります。各OSに正確なイメージサイズを指定しない場合は、拡大または縮小されます。