TITLE:JFrameのIconを変更

JFrameのIconを変更

編集者:Terai Atsuhiro~

作成日:2004-08-30
更新日:2021-07-06 (火) 18:52:52
  • category: swing folder: FrameIcon title: JFrameのIconを変更 tags: [JFrame, Icon, Image] author: aterai pubdate: 2004-08-30T05:11:06+09:00 description: JFrameのタイトルバー左に表示されているアイコンを別の画像に変更します。 image: https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTNO_p95yI/AAAAAAAAAac/gl0vOOoKH14/s800/FrameIcon.png

概要

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

概要

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

サンプルコード

#spanend
#spanadd
MainPanel panel = new MainPanel();
#spanend
#spanadd
URL url = panel.getClass().getResource("16x16.png");
#spanend
#spanadd
JFrame frame = new JFrame();
#spanend
#spanadd
frame.setIconImage(Toolkit.getDefaultToolkit().createImage(url));
#spanend
#spanadd
View in GitHub: Java, Kotlin

#screenshot

解説

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になる
 JFrame frame = new JFrame();
 MainPanel panel = new MainPanel();
 URL url = panel.getClass().getResource("16x16.png");
 frame.setIconImage(Toolkit.getDefaultToolkit().createImage(url));
#spanadd
Toolkit tk = Toolkit.getDefaultToolkit();
#spanend
#spanadd
frame.setIconImage(tk.createImage(MainPanel.class.getResource("RECYCLE BIN - EMPTY_16x16-32.png")));
#spanend
#spanadd
frame.setIconImages(java.util.Arrays.asList(
#spanend
  tk.createImage(MainPanel.class.getResource("ATTACHMENT_16x16-32.png")),
  tk.createImage(MainPanel.class.getResource("wi0054-32.png"))));
  • &jnlp;
  • &jar;
  • &zip;

解説

JFrame#setIconImageメソッドでアイコンを設定しています。
  • -
サンプルではGIMPを使って作成した16x16の透過PNGをアイコンとして使用しています。
#spanend
#spanadd
import java.awt.*;
#spanend
#spanadd
import javax.swing.*;
#spanend

#spandel
**参考リンク [#d3455ff6]
#spanend
-[[GIMP>http://www.gimp.org/]]
-[[TheGimp>http://www004.upp.so-net.ne.jp/iccii/]]
#spanadd
public class TransparentIconTest {
#spanend
  public static void main(String[] args) {
    EventQueue.invokeLater(() -> createAndShowGui());
  }

#spandel
**コメント [#x176a30a]
#spanend
- %%Java SE 6 で試すとアイコンの表示が乱れる? -- [[terai]] &new{2006-06-29 (木) 17:57:16};%%
  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);
  }
#spanadd
}
#spanend
#spanadd

参考リンク

コメント