【JavaFX】ファイル選択ダイアログ
ファイルの読み込みや保存、ディレクトリの選択などをするときに開くダイアログの説明です。
種類と用途
単一のファイルを選択、複数のファイルを選択、ファイルの保存、ディレクトリの選択、の種類があります。
小さくてわかりにくいですが、下の動画は4種類を順番に表示させています。
ソースファイルは以下の通り。
package tomojavalib.fx;
import java.io.File;
import java.util.List;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.*;
import javafx.stage.DirectoryChooser;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
public class ChooserTest extends Application {
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage stage){
//StageにPaneとSceneを置く
Vbox pane = new Vbox();
//単一ファイルを選択
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle( "ファイル選択" );
fileChooser.setInitialDirectory( new File("c:/test/") );
File f1 = fileChooser.showOpenDialog( stage );
//複数ファイルを選択
FileChooser fileChooser2 = new FileChooser();
fileChooser2.setTitle( "複数ファイル選択" );
fileChooser2.setInitialDirectory( new File("c:/test/") );
List<File> f2= fileChooser2.showOpenMultipleDialog( stage );
//ファイルを保存
FileChooser fileChooser3 = new FileChooser();
fileChooser3.setTitle( "ファイル保存" );
fileChooser3.setInitialDirectory( new File("c:/test/") );
fileChooser3.setInitialFileName("save.txt");
File f3= fileChooser3.showSaveDialog( stage );
//ディレクトリを選択
DirectoryChooser directoryChooser = new DirectoryChooser();
directoryChooser.setTitle( "ディレクトリ選択" );
directoryChooser.setInitialDirectory( new File("c:/test/") );
File f4 = directoryChooser.showDialog( stage );
Scene scene = new Scene(pane, 320, 240);
stage.setScene(scene);
stage.show();
}
}
単一のファイル選択、複数のファイル選択、ファイル保存の場合は、FileChooserを使い、それぞれ
単一ファイル読み込み : fileChooser.showOpenDialog( stage );
複数ファイル読み込み : fileChooser2.showOpenMultipleDialog( stage );
ファイル保存 : fileChooser3.showSaveDialog( stage );
で表示します。
ディレクトリの選択は、DirectoryChooserを使い、directoryChooser.showDialog( stage );で表示させます。
プログラムはダイアログを表示した行で止まり、ダイアログを閉じた段階で再開されます。
ダイアログはFileやListを返すので、読み込みは保存は受け取ったFile、Listを利用して行います。
上のサンプルプログラムはStageを開いていきなりダイアログを表示させていますが、通常はボタンを押すなどのイベントで開くことになります。
設定
初期ディレクトリを設定する
fileChooser.setInitialDirectory( new File("./") );
で初期表示するディレクトリを設定します。
"c:/"とすればCドライブ
"./"は実行しているディレクトリ
"../"は実行ディレクトリの一つ上の階層
"user.home"はホームディレクトリ
選択するファイルの種類を指定する
fileChooser.getExtensionFilters().add( new FileChooser.ExtensionFilter( "テキストファイル", "*.txt" ) );
で選択できるファイルを制限することができます。
下の図のようにダイアログに反映されます。
テキストファイルを読み込むサンプルプログラム
ボタン楽天 を押すとファイル読み込みダイアログを表示し、選択したテキストファイルの最初の行を表示するサンプルプログラムです。
package tomojavalib.fx;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.*;
import javafx.scene.text.Text;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
public class FileChooserTest extends Application {
Stage stage;
TextField t;
Text text ;
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage stage){
this.stage = stage;
//StageにPaneとSceneを置く
Vbox pane = new Vbox();
Label l1 = new Label( " ボタン " );
pane.getChildren().add( l1 );
Button b = new Button( " ボタン " );
pane.getChildren().add( b );
//マウスがクリックされたとき
EventHandler<MouseEvent> mouseClick = ( event ) -> this.mouseClick( event );
b.addEventHandler( MouseEvent.MOUSE_CLICKED , mouseClick );
Label l2 = new Label( " ファイル名 " );
pane.getChildren().add( l2 );
t = new TextField( "ファイルを指定" );
pane.getChildren().add( t );
Label l3 = new Label( " ファイルの中身 " );
pane.getChildren().add( l3 );
text = new Text("");
pane.getChildren().add( text );
Scene scene = new Scene(pane, 320, 240);
stage.setScene(scene);
stage.show();
}
private void mouseClick( MouseEvent e ){
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle( "ファイル選択" );
fileChooser.setInitialDirectory( new File("../") );
//fileChooser.setInitialDirectory(new File(System.getProperty("user.home")));
fileChooser.getExtensionFilters().add( new FileChooser.ExtensionFilter( "テキストファイル", "*.txt" ) );
File file = fileChooser.showOpenDialog( this.stage );
if (file != null) {
String filename = file.getPath().toString();
this.t.setText( filename );
try{
BufferedReader br = new BufferedReader(new FileReader(file));
String str = br.readLine();
text.setText( str );
}catch(Exception ex){}
}
}
}
最終更新日: 2017-05-18 10:15:26