概要

JFrameのタイトルバー左に表示されているアイコンを別の画像に変更します。

サンプルコード

MainPanel panel = new MainPanel();
URL url = panel.getClass().getResource("16x16.png");
JFrame frame = new JFrame();
frame.setIconImage(Toolkit.getDefaultToolkit().createImage(url));
view all

解説

JFrame#setIconImageメソッドでJFrameのタイトルバーなどに表示される画像を設定しています。

  • サンプル画像としてGIMPを使って作成したサイズ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"))));

import java.awt.*;
import javax.swing.*;

public class TransparentIconTest {
  public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
      @Override public void run() {
        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);
  }
}

参考リンク

コメント