概要

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 all

解説

上記のサンプルでは、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が適用される?

参考リンク

コメント