2014-09-16
【Java】OS独自のファイルダイアログを表示する方法
[ PR ]
Swingの不格好なファイルダイアログ
OS独自のファイルダイアログって便利ですよね。お気に入りのフォルダを登録したりしてカスタマイズして使っています。
それに比べて、Java/Swingで表示されるダイアログは使いづらいと思いませんか?
お気に入り機能もなく、ショートカットキーもなし。ボタンも少ないので、本当に不便です。
意外な解決方法
調べていたら、StackOverFlowの記事にいろんな解決方法が紹介されてました。
その中でも最も簡単で、意外と知らない解決法が、 AWTを使うというものです。
ちょっと単純すぎて疑ってしまいますが、以下のウィンドウはAWTのFileDialog
を使って表示したものです。
確かに、Macの標準ダイアログが表示されていますね!
WindowsやLinuxで試せる環境が手元にないので、以下のコードを是非試してみてください。AWTとSwingのダイアログが比較できるようになっています。
NativeFileDialog.java
import java.awt.*;
import javax.swing.*;
import java.io.File;
class NativeFileDialog {
public static void print(String s){
System.out.print(s);
}
public static void println(String s){
System.out.println(s);
}
public static void main(String[] args) {
println("");
showAWTDialog();
showSwingDialog();
System.exit(0);
}
static void showAWTDialog(){
FileDialog dialog = new FileDialog(
(Frame)null,
"FileDialog (AWT)",
FileDialog.LOAD);
dialog.setVisible(true);
String filename = dialog.getFile();
print("FileDialog (AWT): ");
if (filename != null){
println(filename);
}else{
println("cancelled");
}
}
static void showSwingDialog(){
JFileChooser filechooser = new JFileChooser("FileDialog (Swing)");
int selected = filechooser.showOpenDialog(null);
print("JFileChooser (Swing): ");
if (selected == JFileChooser.APPROVE_OPTION){
File file = filechooser.getSelectedFile();
String filename = file.getName();
println(filename);
}else{
println("cancelled");
}
}
}
コンパイル・実行するには、以下のコマンドをターミナル(コマンドプロンプト)に入力します。
javac NativeFileDialog.java
java NativeFileDialog
すると、まずAWTのダイアログが表示されます。
何かを選択またはキャンセルすると、Swingのダイアログが表示されます。
何かを選択またはキャンセルすると、終了します。
その間に、以下の様なログが表示されます。
FileDialog (AWT): filedialog-awt.png
JFileChooser (Swing): cancelled
まとめ
ネイティブなファイルダイアログを表示するには、SWTが必要と思いがちですが、意外にもAWTで実現可能です。
ただAWTは動作が重いので、できるだけ一部分に留めるのが良さそうです。
Java Swing Hacks ―今日から使える驚きのGUIプログラミング集
posted with amazlet at 14.09.16
Joshua Marinacci Chris Adamson
オライリージャパン
売り上げランキング: 218,517
オライリージャパン
売り上げランキング: 218,517