Java アプリケーションへのファイル選択用ダイアログの追加
執筆: Petr Dvorak (2009 年 12 月)、管理: Alyona Stashkova
このチュートリアルでは、javax.swing.JFileChooser コンポーネントを使用して Java アプリケーションにファイル選択用ダイアログを追加する方法を示します。すべてを手書きでコーディングすることもできますが、一部の作業を省略できる NetBeans GUI Builder を使用する方法をお勧めします。課題の一環として、.txt ファイルをテキスト領域に読み込む、小さな Java アプリケーションを作成します。
ファイル選択用ダイアログを使用した完成版プロジェクトをダウンロードできます。
目次
このチュートリアルを完了するには、次のソフトウェアとリソースが必要です。
アプリケーションの作成
まず、新しい Java アプリケーションを作成します。
- メインメニューから「ファイル」>「新規プロジェクト」を選択します。「Java」カテゴリおよび「Java アプリケーション」のプロジェクトの種類を選択します。「次へ」をクリックします。
- 「プロジェクト名」に「
JFileChooserDemo」と入力し、プロジェクトの場所を指定します。
- 「主クラスを作成」チェックボックスを選択解除します。
- 「主プロジェクトとして設定」チェックボックスが選択されていることを確認します。
- 「完了」をクリックします。
アプリケーションフォームの作成
この節では、JFrame コンテナを作成し、そこにいくつかのコンポーネントを追加します。
JFrame フォームを作成するには、次の手順に従います。
- 「ソースパッケージ」ノードを右クリックし、「新規」>「その他」を選択します。「Swing GUI フォーム」カテゴリおよび「JFrame フォーム」のファイルの種類を選択します。「次へ」をクリックします。
- 「クラス名」に「
JFileChooserDemo」と入力します。
- 「パッケージ」に「
jfilechooserdemo.resources」と入力します。
- 「完了」をクリックします。
- 「プロパティー」ウィンドウで、「タイトル」プロパティーに「
デモアプリケーション」と入力し、Enter キーを押して確認します。
JFrame フォームにコンポーネントを追加するには:
- パレットで「Swing メニュー」カテゴリを開き、「メニューバー」コンポーネントを選択して、それを JFrame の左上隅にドラッグします。
注: パレットが表示されない場合は、メインメニューの「ウィンドウ」>「パレット」を選択するか、または Ctrl+Shift+8 キーをクリックして開きます。
- 「メニューバー」コンポーネントの「編集」項目を右クリックし、コンテキストメニューの「削除」を選択します。
- 実行中のアプリケーションから FileChooser を開くことができるメニュー項目を追加するには、パレットの「Swing メニュー」カテゴリで新しい「メニュー項目」(JMenuItem1) を選択し、それを「メニューバー」にドラッグして「メニューバー」の「ファイル」項目にドロップします。
注: 別の「メニュー項目」をドラッグする場合は、それが「メニューバー」に追加されるように、その前に「メニューバー」が選択されていることを確認してください。
- 「デザイン」ビューで「jMenuItem1」を右クリックし、コンテキストメニューから「変数名を変更」を選択します。項目の名前を「
Open」に変更し、「了解」をクリックします。
- 「デザイン」ビューで「jMenuItem1」が引き続き選択されていることを確認します。スペースバーを押して、コンポーネントのテキストを編集します。テキストを「
開く」に変更し、Enter キーを押して確認します。
- 「開く」メニュー項目のアクションハンドラを指定します。メニュー項目を右クリックし、コンテキストメニューから「イベント」>「Action」>「actionPerformed」を選択します。GUI ビルダーによって自動的に「ソース」ビューに切り替えられ、OpenActionPerformed() という名前の新しいイベントハンドラメソッドが生成されます。「ナビゲータ」ウィンドウは次のようになります。
- 作成されているアプリケーションから FileChooser を終了するためのメニュー項目を追加するには、「デザイン」モードに戻ってパレットの「Swing メニュー」カテゴリで「メニュー項目」(JMenuItem1) を選択し、それを「開く」メニュー項目の下にある「メニューバー」にドラッグします。オレンジ色の強調表示は JMenuItem1 が配置される場所を示しています。

- 「デザイン」ビューで「jMenuItem1」を右クリックし、コンテキストメニューから「変数名を変更」を選択します。項目の名前を「
Exit」に変更し、「了解」をクリックします。
- 「デザイン」ビューで「jMenuItem1」が引き続き選択されていることを確認します。スペースバーを押して、コンポーネントのテキストを編集します。テキストを「終了」に変更し、Enter キーを押して確認します。
- 「終了」メニュー項目のアクションハンドラを指定します。メニュー項目を右クリックし、コンテキストメニューから「イベント」>「Action」>「actionPerformed」を選択します。GUI ビルダーによって自動的に「ソース」ビューに切り替えられ、
ExitActionPerformed() という名前の新しいイベントハンドラメソッドが生成されます。「ナビゲータ」ウィンドウの「OpenActionPerformed()」ノードの下に「ExitActionPerformed」ノードが表示されます。
- 「終了」メニュー項目を機能させるには、
ExitActionPerformed() メソッドの本文に次のソースを追加します。
System.exit(0);
- 「デザイン」モードに戻ります。次の図に示すように、パレットの「Swing コントロール」カテゴリから「テキスト領域」(JTextArea) をフォームにドラッグします。
- 追加されたコンポーネントのサイズを変更して、あとでファイル選択用ダイアログによって表示されるテキストの領域を確保します。変数の名前を
textarea に変更します。フォームは次のスクリーンショットのようにします。
これで、このチュートリアルのベースとなる単純な Java アプリケーションが設定されました。次に、実際のファイル選択用ダイアログを追加します。
ファイル選択用ダイアログの追加
- まだ開いていない場合は、「ウィンドウ」>「ナビゲート」>「インスペクタ」を選択して「インスペクタ」ウィンドウを開きます。
- 「インスペクタ」で、「JFrame」ノードを右クリックします。コンテキストメニューから、「パレットから追加」>「Swing ウィンドウ」>「ファイル選択用ダイアログ」を選択します。
GUI ビルダーのヒント: 「パレットから追加」コンテキストメニューの代わりに、パレットの「Swing ウィンドウ」カテゴリから、JFileChooser コンポーネントを GUI ビルダーの白い領域にドラッグ&ドロップすることもできます。それでも同じ結果になりますが、操作が難しくなります。JFileChooser のプレビューは非常に大きいため、ウィンドウを誤ってパネルに挿入してしまい、望まない結果になる可能性があります。
- 「インスペクタ」を見ると、JFileChooser がフォームに追加されたことを確認できます。
- 「JFileChooser」ノードを右クリックし、変数の名前を「
fileChooser」に変更します。
これで、ファイル選択用ダイアログが追加されました。次に、目的のタイトルが表示されるようにファイル選択用ダイアログを調整し、カスタムファイルフィルタを追加し、さらにファイル選択用ダイアログをアプリケーションに統合します。
ファイル選択用ダイアログの設定
「開く」アクションの実装
- 「インスペクタ」ウィンドウで「JFileChooser」をクリックして選択したあと、「プロパティー」ダイアログボックスでプロパティーを編集します。「dialogTitle」プロパティーを「
This is my open dialog」に変更し、Enter キーを押して「プロパティー」ダイアログボックスを閉じます。
-
GUI ビルダーで「ソース」ボタンをクリックして「ソース」モードに切り替えます。ファイル選択用ダイアログをアプリケーションに統合するには、次のコードスニペットを既存の
OpenActionPerformed() メソッドにペーストします。
private void OpenActionPerformed(java.awt.event.ActionEvent evt) {
int returnVal = fileChooser.showOpenDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
try {
// ファイルに対する処理、例: TextArea での表示
textarea.read( new FileReader( file.getAbsolutePath() ), null );
} catch (IOException ex) {
System.out.println("problem accessing file"+file.getAbsolutePath());
}
} else {
System.out.println("File access cancelled by user.");
}
}
注: このコードスニペットの最初と最後の行は、ソースファイル内の既存の行と重複するため、削除してください。
- エディタによってコード内のエラーが報告された場合は、コード内の任意の場所を右クリックして「インポートを修正」を選択するか、または Ctrl+Shift+I キーを押します。「すべてのインポートを修正」ダイアログボックスで、デフォルトを受け入れてインポート文を更新し、「了解」をクリックします。
このように、FileChooser の getSelectedFile() メソッドを呼び出してユーザーがクリックしたファイルを判定し、それを処理します。この例では、ファイルの内容を読み取ってテキスト領域に表示します。
ファイルフィルタの実装
次に、ファイル選択用ダイアログに *.txt ファイルのみが表示されるようにする、カスタムファイルフィルタを追加します。
- 「デザイン」モードに切り替え、「インスペクタ」ウィンドウで「FileChooser」を選択します。
- 「プロパティー」ウィンドウで、「fileFilter」プロパティーの横にある省略符号 (...) ボタンをクリックします。
- 「fileFilter」ダイアログボックスで、コンボボックスから「カスタムコード」を選択します。

-
テキストフィールドに「new MyCustomFilter()」と入力します。「了解」をクリックします。
-
このカスタムコードを機能させるには、FileFilter クラスを拡張する内部 (または外部) クラス MyCustomFilter を記述します。次のコードスニペットをクラスのソースのインポート文の下にコピー&ペーストして、このフィルタを実装する内部クラスを作成します。
class MyCustomFilter extends javax.swing.filechooser.FileFilter {
@Override
public boolean accept(File file) {
// Allow only directories, or files with ".txt" extension
return file.isDirectory() || file.getAbsolutePath().endsWith(".txt");
}
@Override
public String getDescription() {
// This description will be displayed in the dialog,
// hard-coded = ugly, should be done via I18N
return "Text documents (*.txt)";
}
}
注: より高性能で、切り替え可能なファイルフィルタを実装する方法を学習するには、addChoosableFileFilter メソッドを参照してください。
アプリケーションの実行
- 「JFileChooserDemo」プロジェクトを右クリックし、「実行」を選択してサンプルプロジェクトを開始します。
-
「プロジェクトを実行」ダイアログボックスで「
jfilechooserdemo.resources.JFileChooserDemo」主クラスを選択し、「了解」をクリックします。
- 実行中のデモアプリケーションで、「ファイル」メニューの「開く」を選択してアクションをトリガーします。
結果は次のようになります。

- アプリケーションを終了するには、「ファイル」メニューの「終了」を選択します。
ほかにも、GUI パレットの ColorChooser や OptionPane などの便利な Swing ウィンドウやダイアログを試してみてください。
次の手順