概要
JFrame
のタイトルバー左に表示されているアイコンを別の画像に変更します。
Screenshot
Advertisement
サンプルコード
MainPanel panel = new MainPanel();
URL url = panel.getClass().getResource("16x16.png");
JFrame frame = new JFrame();
frame.setIconImage(Toolkit.getDefaultToolkit().createImage(url));
View in GitHub: Java, Kotlin解説
JFrame#setIconImage
メソッドでJFrame
のタイトルバーなどに表示される画像を設定しています。
- サンプル画像としてサイズ
16x16
の透過PNG
を使用 JDK 1.6.0
から、JFrame#setIconImage(Image)メソッドはWindow#setIconImage(Image)メソッドを使用するようになった- また
JDK 1.6.0
からWindow#setIconImages(List<? extends Image>)メソッドで複数のイメージを設定可能になった- 同サイズのイメージがある場合は、先頭から検索して最初のイメージが使用される
- どのサイズのイメージが使用されるかは環境に依存する
- 参考: java - Sizes of frame icons used in Swing - Stack Overflow
Window#setIconImage(Image)
とWindow#setIconImages(List<? extends Image>)
を両方使用した場合、後に実行したメソッドの設定が有効になる- たとえば以下のコードの場合、タイトルバーのアイコンは
ATTACHMENT_16x16-32.png
になる
- たとえば以下のコードの場合、タイトルバーのアイコンは
Toolkit tk = Toolkit.getDefaultToolkit();
frame.setIconImage(tk.createImage(MainPanel.class.getResource("RECYCLE BIN - EMPTY_16x16-32.png")));
frame.setIconImages(java.util.Arrays.asList(
tk.createImage(MainPanel.class.getResource("ATTACHMENT_16x16-32.png")),
tk.createImage(MainPanel.class.getResource("wi0054-32.png"))));
JFrame.setDefaultLookAndFeelDecorated(true);
でデフォルトLookAndFeel
のウィンドウ修飾をタイトルバーに適用する場合、JFrame#setIconImage(...)
で設定したアイコンが透過されない
import java.awt.*;
import javax.swing.*;
public class TransparentIconTest {
public static void main(String[] args) {
EventQueue.invokeLater(() -> createAndShowGui());
}
public static void createAndShowGui() {
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame f = new JFrame();
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
ImageIcon icon = new ImageIcon(
TransparentIconTest.class.getResource("16x16.png"));
f.setIconImage(icon.getImage());
f.setSize(320, 240);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}