appendix> Component> JFileChooser TOPUPPREVNEXT

javax.swing.JFileChooser

【主な機能】

下図のようなダイアログを開き、ファイルを選択させる仕組みをファイルチューザ といいます。 読み込み用のファイルを選択するもの、書き込み用のファイルを選択するもの、 選択ボタンに任意の文字列を表示するもの の3種類があります。 下図は、読み込み用です(選択ボタンに「開く」と表示される)。

ダイアログを開くときに表示するフォールダを指定したり、表示するファイルを限定したりすることができます。

表示するファイルを限定するために、 ファイル・フィルタ javax.swing.filechooser.FileFilter (クラス)を用います。

一般のファイルを選別する仕掛けとしては、java.io.File クラスの list メソッドや、 listFile メソッドのための java.io.FileFilter インターフェースや、 java.io.FilenameFilter インターフェースがあります。 accept メソッドでファイルの選択を表現する点は共通していますが別物です。

【継承】

    java.lang.Object
          └ java.awt.Component
                └ java.awt.Container
                      └ javax.swing.JComponent
                             └ javax.swing.JFileChooser

【主なコンストラクタ】

コンストラクタ機能
JFileChooser ( String directory )
JFileChooser ( File directory )
どのディレクトリを最初に表示するかを、 directory で 指示します。 directory は、 文字列でフルパス( ルートディレクトリからの完全なパス )か、 File クラスのインスタンスを渡します。 null を指定するとユーザのホームディレクトリに、 また文字列 "." を指定すると、カレントディレクトリになります。

【よく使われるメソッド】

メソッド機能
int showOpenDialog ( Component parent ) 上図のように、右下に 「開く」と「取消し」ボタンのある ダイアログを開きます。どちらのボタンが押されたかは、 返される値で示されます。返される値は次のとおり。
JFileChooser.CANCEL_OPTION 「取消し」ボタン
JFileChooser.APPROVE_OPTION 「開く」ボタン
JFileCHooser.ERROR_OPTION エラーが発生したか、
「取消し」ボタンが押された
ダイアログは parent に指定したフレームの中央に表示されます。 画面の中央に表示する場合は null を指定します。
int showSaveDialog ( Component parent ) 「開く」のかわりに、「保存」ボタンがついたダイアログを開きます。
int showDialog ( Component parent ,
String approveButtonText )
「開く」や「保存」のかわりに、 approveButtonText で指定した文字列を表示したボタンのついたダイアログを開きます。
File getSelectedFile() 選択されたファイルに対する File オブジェクト が返されます。
得られたオブジェクトの getPath メソッドを呼ぶと 選択したファイルのフルパスが文字列で得られます。
void setFileSelectionMode( int mode ) 選択の対象を指定します。
mode には次の値が指定可能です。
  • JFileChooser.FILES_ONLY
  • JFileChooser.DIRECTORIES_ONLY
  • JFileChooser.FILES_AND_DIRECTORIES
デフォルトは、JFileChooser.FILES_ONLY です。 つまり、フォールダ(ディレクトリ)をクリックするとフォールダが選択されるのではなく、 そのフォールダが開き、その中のファイルが選択可能になります。
void setControlButtonsAreShown( boolean b ) ボタンを表示するかどうかを指定します。
void setMultiSelectionEnabled( boolean b ) 複数ファイルを選択できるかどうかを指定します。
File[] getSelectedFiles ( boolean b ) 複数ファイルの選択が許される場合、選択されたファイルの配列を返します。

【使用例1】

カレントディレクトリに対して、「開く」ボタンのついたダイアログを画面の中央に開きます。

プログラム JFileChooserDemo1.java

実行例

実行すると画面の中央に下図が表示されます。
JFileChooserDemo1-1.gif

ファイルの名前をクリックして、「開始」ボタンをクリック(下図)
JFileChooserDemo1-2.gif

ダイアログが消えて
JFileChooserDemo1-3.gif

【使用例2】

カレントディレクトリに対して、「開く」ボタンのついたダイアログを親画面の中央に開きます。

プログラム JFileChooserDemo2.java

実行例

実行すると下図が表示されます。
JFileChooserDemo2-1.gif

適当な場所に移動させてから、 「ファイル選択」ボタンをクリックするとフレームの上にダイアログが表示されます。
JFileChooserDemo2-2.gif

ファイルの名前をクリックして、「開始」ボタンをクリックすると、 ダイアログが消えて、フレームの NORTH のラベルが書き換えられます。
JFileChooserDemo2-3.gif

【使用例3】

javax.swing.filechooser.FileFilter の使用例

拡張子が txtjava のものだけを表示するようにします。

プログラム JFileChooserDemo3.java

実行例
JFileChooserDemo3-1.gif     JFileChooserDemo3-2.gif

ファイルタイプをプルダウンして 「全てのファイル」を選択すると右図のようになります。

javax.swing.filechooser.FileFilter クラスを継承した FileFilterForProgramAndData というファイルフィルタを用意し、 accept メソッドと getDescription メソッドを定義します(26〜38行目)。 accept メソッドは、選択対象としたファイルに対して true、 選択対象にしたくないファイルに対して false を返すようなメソッドを定義しておきます。

File クラス の インスタンス f から、 文字列のファイル名を取り出し、 さらに拡張子部分を取り出し小文字に変換してから、txtjava のいずれかに等しいかどうか比較しています。

このクラスのインスタンスを setFileFilter で設定すると、 必要な場合にコールバックされるようになります(9行目)。


更新日:2005-10-22