プロジェクト

全般

プロフィール

JavaFXとダイアログ

ファイル選択ダイアログ

JavaFXには、標準でFileChooserクラスが用意されています。
Oracle公式JavaFXドキュメント「Working with JavaFX UI Components」の28章 File Chooserに詳しい解説があります。

ファイルを選択

ダイアログにタイトルを付け、特定の拡張子のみを選択対象とする

FileChooser jarChooser = new FileChooser();
jarChooser.setTitle("JARファイルを選択してください");
jarChooser.getExtensionFilters().add(
    new FileChooser.ExtensionFilter("JAR", "*.jar")
);
File selected = jarChooser.showOpenDialog(primaryStage);
if (selected != null) {
    // ファイルが選択されたときの処理
}
  • 複数の拡張子を選択対象とするときは、addメソッドではなくaddAllメソッドで複数のExtensionFilterを指定します。
  • showOpenDialogの引数にトップレベルウィンドウ(stage)ではなくnullを指定すると、ファイル選択ダイアログがモーダルにならず、トップレベルウィンドウの背後に回ることも可能になります。(通常は好ましい振る舞いではありません)

ファイル選択ダイアログを開いたときに特定のディレクトリを表示したい

FileChooser#setInitialDirectory(File) メソッドを使います。

jarChooser.setInitialDirectory(System.getProperty("user.home"));

ファイル選択ダイアログを開いたときに、最後に開いたディレクトリを表示したい

FileChooserは、開いたディレクトリを覚えてはくれないので、アプリケーション側でディレクトリを覚えておき、FileChooserのinitialDirectoryPropertyにそのディレクトリをバインドします。

ビューモデルクラスに、ObjectProperty<File>型のlastOpenDirectoryPropertyを定義します。

class MyViewModel {
    ObjectProperty<File> lastOpenDirectoryProperty = new SimpleObjectProperty<>(new File(System.getProperty("user.dir")));
    :
    public ObjectProperty<File> lastOpenDirectoryProperty() { return lastOpenDirectoryProperty; }
}
  • 初期状態ではカレントディレクトリを開くよう初期値を指定しています

コントローラークラスの初期化処理でFileChooserのinitialDirectoryPropertyとビューモデルのlastOpenDirectoryPropertyをバインドします。

class MyViewController implements Initializable {
    FileChooser fileChooer;
    MyViewModel model = ...
    :
    public void initialize(URL location, ResourceBundle resources) {
        fileChooser = new FileChooser();
        fileChooser.initialDirectoryProperty().bindBidirection(model.lastOpenDirectoryProperty());
        :
    }
    :
}

コントローラークラスのファイル選択ダイアログを開く処理で、ファイルを開いたらそのディレクトリをビューモデルのlastOpenDirectoryPropertyにセットします。

       File selected = fileChooser.showOpenDialog(getStage());
        if (selected == null) {
            return;
        } else {
            model.lastOpenDirectoryProperty().set(selected.getParentFile());
        }

一般的なダイアログ

javafx.scene.control.Alert クラスを利用して、汎用のダイアログを表示します。
用意されているダイアログの種類は、Alert.AlertType 列挙型に定義されています。

  • AlertType.INFORMATION
  • AlertType.CONFIRMATION
  • AlertType.WARNING
  • AlertType.ERROR
  • AlertType.NONE

Alert の生成と表示

Alertクラスのインスタンスを生成し、表示メソッドを読んで表示させます。

単純なメッセージダイアログの表示

次のサンプルは、INFORMATION種類のダイアログをブロッキングで表示します。ダイアログのボタンをクリックするまでアプリケーション画面をブロックします。

javafx.scene.control.Alert;
  :
  var alert = new Alert(AlertType.INFORMATION, "Hello, dialog world");
  alert.showAndWait();
  • showAndWait()は、ダイアログをブロッキングで表示(ボタンをクリックするまでアプリケーション画面をブロック)

Alertの生成(コンストラクタ)

Alertクラスのコンストラクタは次の書式です。

public Alert(Alert.AlertType alertType, String contentText, ButtonType... buttons)
  • ダイアログの種類
  • ダイアログに表示するメッセージのテキスト
  • ダイアログに表示するボタンの種類(可変長引数なので、0個以上複数指定可能)

ボタンを省略すると、ダイアログ種類に応じたデフォルトのボタンが表示されます。

ダイアログの種類

コンストラクタで、種類とメッセージ文字列を指定し、ボタン設定はデフォルトとしたときの各ダイアログの表示結果を示します。

AlertType.Information AlertType.Confirmation AlertType.Warning AlertType.Error AlertType.None


3ヶ月前に更新