2016-11-04

【備忘録】Swing / JFileChooser のウィンドウアイコンの変更

JavaFX が利用できるようになった Java で GUI アプリケーションを作成する場合、Swing を使うことはもう無いだろうと思っていました。しかし、その考えは甘かったようです。

業務で手間がかかる仕事を一部スクリプト化・自動化して手間を軽減して時間も節約したいのですが、客先でインストールしたサーバでの作業であるため、利用できる環境は Java 7 だけという状況に遭遇したのです。

Java 7 では JavaFX 2.x が利用できるはずですが…、あれっ、JavaFX 8 用に作ったプログラムをコンパイルし直してもうまく動いてくれませんでした。何か気を付けなければならなかったことがあったような気がしましたが、それを思い出せず時間もなかったので、確実に動作するように Swing で GUI 部分を組むことにしました。

簡単なユーティリティプログラムみたいなものですが、将来的にはお客さんも使う可能性があったので、GUI デザインの妥協はできません。そこで気になったのが、JFileChooser のアイコンです。アプリケーションのメインウィンドウに使用しているアイコンをそのまま継承してしまっています。カスタマイズする方法が判らなかったので調べてみると Stack Overflow にピッタリな例がありましたので転用しました [1]

動作環境は次の通りです。

  • OS: Windows 7 Enterprise (64-bit)
  • Java SE Development Kit 7 Update 80 (64-bit)
  • IDE: NetBeans IDE 8.2 (Build 201609300101)

下記に該当する部分のみを示しました。なお、imgFolder は ImageIcon 型の変数で、フォルダアイコンを定義しています。

    // directory selection
    private String chooseDirectory(String dir, JTextField txf) {
        JFileChooser chooser = new JFileChooser(new File(dir)) {
            @Override
            protected JDialog createDialog(Component parent) throws HeadlessException {
                JDialog dialog = super.createDialog(parent);
                dialog.setIconImage(imgFolder.getImage());
                return dialog;
            }
        };

        chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        int selected = chooser.showDialog(this, "Select Directory");

        switch (selected) {
            case JFileChooser.APPROVE_OPTION:
                File file = chooser.getSelectedFile();
                dir = file.getAbsolutePath();
                txf.setText(dir);
                break;
            case JFileChooser.CANCEL_OPTION:
                break;
            case JFileChooser.ERROR_OPTION:
                break;
            default:
                break;
        }
        return dir;
    }

参考サイト

  1. swing - How to change default java icon in JFileChooser - Stack Overflow

 

ブログランキング・にほんブログ村へ
にほんブログ村

0 件のコメント: