複数ファイルを選択可能に設定する
デフォルトの設定では一度に選択出来るファイルは1つだけですが、複数のファイルを選択可能にする方法を確認します。複数のファイルを同時に選択できるようにするにはJFileChooserクラスで用意されている「setMultiSelectionEnabled」メソッドを使います。
public void setMultiSelectionEnabled(boolean b)
ファイルチューザを設定して複数ファイル選択を可能にします。 パラメータ: b - 複数のファイルを選択できる場合は true
引数に複数ファイルを選択できるようにするかどうかを表すboolean型の値を設定します。「true」を設定した場合には複数のファイルをを同時に選択できます。「false」を設定した場合には一度に1つだけしか選択できません。
また複数のファイルを選択できるようにした場合には、選択されたファイルを取得する際に「getSelectedFile」メソッドの代わりに「getSelectedFiles」メソッドを使うことで全ての選択されたファイルを取得できます。
public File[] getSelectedFiles()
複数選択が許可されるようにファイルチューザが設定されている場合に、選択 されたファイルのリストを返します。
メソッドを実行すると戻り値としてダイアログで選択されたファイルを表すFileクラスのオブジェクトの配列を取得できます。Fileクラスについては『ファイルを管理する』を参照して下さい。
実際の使い方は次のようになります。
JFileChooser filechooser = new JFileChooser(); filechooser.setMultiSelectionEnabled(true); int selected = filechooser.showOpenDialog(this); File[] files = filechooser.getSelectedFiles();
サンプルプログラム
では簡単なサンプルを作成して試してみます。
import javax.swing.*; import java.io.File; import java.awt.BorderLayout; import java.awt.event.*; public class JFileChooserTest11 extends JFrame implements ActionListener{ JLabel label; public static void main(String[] args){ JFileChooserTest11 frame = new JFileChooserTest11(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(10, 10, 300, 200); frame.setTitle("タイトル"); frame.setVisible(true); } JFileChooserTest11(){ JButton button = new JButton("file select"); button.addActionListener(this); JPanel buttonPanel = new JPanel(); buttonPanel.add(button); label = new JLabel(); JPanel labelPanel = new JPanel(); labelPanel.add(label); getContentPane().add(labelPanel, BorderLayout.CENTER); getContentPane().add(buttonPanel, BorderLayout.PAGE_END); } public void actionPerformed(ActionEvent e){ JFileChooser filechooser = new JFileChooser("c:\\temp"); filechooser.setMultiSelectionEnabled(true); int selected = filechooser.showOpenDialog(this); if (selected == JFileChooser.APPROVE_OPTION){ File[] files = filechooser.getSelectedFiles(); StringBuffer sb = new StringBuffer(); for (int i = 0 ; i < files.length ; i++){ sb.append(files[i].getName()); sb.append(" "); } label.setText(new String(sb)); } } }
上記をコンパイルした後で実行すると次のように表示されます。
ボタンをクリックするとダイアログが表示されます。
今回は複数のファイルを同時に選択可能になっています。1つのファイルを選択した状態で「Shift」キーを押しながら他のファイルをクリックすると最初に選択されたファイルから次にクリックしたファイルまでを全て選択します。また「Ctrl」キーを押しながらクリックすると離れた位置にあるファイルを個々に選択していくことができます。
選択が終わりましたら「開く」ボタンをクリックして下さい。次のように選択された複数のファイルのファイル名を全て表示します。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。