Javaの「JFileChooser」では、ファイル選択領域で右クリックをすると、コンテキストメニューがポップアップ表示されます。
このメニューは、JPopupMenuを利用したものなので、そのコンポーネントを取得してJMenuItemを追加すれば、独自メニューを追加できます。
この方法を昨日ネットで調べていたのですが、どうも上手い方法が見つからなかったので、自分でプログラムを書きました。
というわけで、以下にその方法を書いておきます。ここでは、「エクスプローラーで開く」というメニューを追加します。現在開いているフォルダを、Windowsのエクスプローラーで開くことができます。
以下、ソースコードを掲載しておきます。
JFileChooser flChsr = new JFileChooser(){
private static final long serialVersionUID = 1L;
{
// メニューの拡張
// JPopupMenuの探索
Component[] c1 = getComponents();
JPopupMenu popMn = null;
outer:
for (int i = 0; i < c1.length; i ++) {
if (c1[i].getClass().getName().equals("javax.swing.JPanel")) {
Component[] c2 = ((JPanel)c1[i]).getComponents();
for (int j = 0; j < c2.length; j ++) {
popMn = ((JPanel)c2[j]).getComponentPopupMenu();
if (popMn != null) break outer;
}
}
}
// JPopupMenuにJMenuItemを追加
if (popMn != null) {
// セパレータ追加
popMn.addSeparator();
// エクスプローラーで開くメニュー
JMenuItem mnItmOpn = new JMenuItem("エクスプローラーで開く");
mnItmOpn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionevent) {
try {
// 開く処理
Desktop desktop = Desktop.getDesktop();
desktop.open(getCurrentDirectory());
} catch (Exception e) {
e.printStackTrace();
}
}
});
popMn.add(mnItmOpn);
}
}
};