概要

JFileChooserのタイトルバーアイコンを親のJFrameとは別のアイコンに変更します。

サンプルコード

JButton button2 = new JButton("makeImage(16, Color.WHITE)");
button2.addActionListener(e -> {
  JFileChooser fileChooser = new JFileChooser() {
    @Override protected JDialog createDialog(Component p) throws HeadlessException {
      JDialog dialog = super.createDialog(p);
      dialog.setIconImage(makeImage(16, Color.WHITE));
      return dialog;
    }
  };
  fileChooser.showOpenDialog(getRootPane());
});
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、JFileChooserのタイトルバーに表示されるウィンドウのアイコンを親のJFrameとは別のアイコンに変更しています。

  • default icon
    • デフォルトのJFileChooserのウィンドウアイコンには親JFrameのウィンドウアイコンが適用される
  • makeImage(16, Color.WHITE)
    • 直接JFileChooserのウィンドウアイコンを変更するメソッドはデフォルトでは存在しないのでJFileChooser#createDialog(...)メソッドをオーバーライドしJFileChooserが使用するJDialogに別アイコンを設定
    • Window#setIconImage(Image)でウィンドウアイコンを設定した場合適当な大きさにリサイズされる
    • 「適当な大きさ」は環境や表示スケールなどによって変化する?
      • 例: Windows 10で表示スケール100%の場合のウィンドウアイコン: 16x16
      • 例: Windows 10で表示スケール125%の場合のウィンドウアイコン: 20x20

  • JFrame.setDefaultLookAndFeelDecorated(true);でデフォルトLookAndFeelのウィンドウ修飾をタイトルバーに適用する場合、表示スケールに関係なくウィンドウアイコンには16x16のサイズが適用される?

参考リンク

コメント