ともさんのHP >プロブラミング >JavaFX >ファイル選択ダイアログ

【JavaFX】ファイル選択ダイアログ

ファイルの読み込みや保存、ディレクトリの選択などをするときに開くダイアログの説明です。

広告


種類と用途

単一のファイルを選択、複数のファイルを選択、ファイルの保存、ディレクトリの選択、の種類があります。
小さくてわかりにくいですが、下の動画は4種類を順番に表示させています。
JavaFXFileChooser動画


ソースファイルは以下の通り。

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" ) );

で選択できるファイルを制限することができます。
下の図のようにダイアログに反映されます。
JavaFXファイルフィルター


テキストファイルを読み込むサンプルプログラム

ボタン楽天 を押すとファイル読み込みダイアログを表示し、選択したテキストファイルの最初の行を表示するサンプルプログラムです。
テキストファイルを読み込むサンプルプログラム

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

ともさんのHP >プロブラミング >JavaFX >ファイル選択ダイアログ

このエントリーをはてなブックマークに追加
広告
おすすめ記事
新着ページ

球根雑草  
タクシーの怪  
ADSLモデムを落雷による故障から守る方法  
アロハシャツの作りかた  
スリット入り涼感シャツ  
初めての炭焼き  
家庭菜園のソバ  
合コン  
セミの飼いかた  
デジタル顕微カメラ  
美霊の泳ぐプール  

私の他のサイト

ともさんの箱庭(ブログ)
家庭菜園
3D-CAD
洋裁CAD

いいねなど

 RSS 
PageSpeedInsights
html5チェック

Author: Tomoyuki Ito

このサイトの文章・写真の無断転載を禁じます