2015-10-26

Dialog とウィンドウを閉じるときのイベント処理 - 改

以前、Dialog とウィンドウを閉じるときのイベント処理 で紹介した記事ですが、確認用ダイアログのウィンドウ左上にアイコンを表示させるように少し変更しました。適当な PNG 画像を question.png というファイル名で、DialogSample.java と同じディレクトリに保存しておいてください。

Java SE 8 Update 40 より、JavaFX に DIalog が導入されたということですので、遅ればせながら Dialog のサンプルを紹介します。ウィンドウの右上の X をクリックしてウィンドウを閉じようとしたときに、確認用のダイアログを表示させるサンプルです。

動作環境は次の通りです。

  • OS: Fedora 22 (x86_64)
  • Java: Java SE 1.8.0_65-b17
  • IDE: NetBeans IDE 8.0.2
リスト:DialogSample.java 
package dialogsample;

import java.util.Optional;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.image.Image;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;

public class DialogSample extends Application {

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setOnCloseRequest((WindowEvent t) -> {
            abortAction(t);
        });

        Button btn = new Button();
        btn.setText("Say 'Hello World'");
        btn.setOnAction((ActionEvent event) -> {
            System.out.println("Hello World!");
        });

        StackPane root = new StackPane();
        root.getChildren().add(btn);

        Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    private void abortAction(WindowEvent t) {
        Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
        alert.setTitle("確認");
        alert.setHeaderText(null);
        alert.setContentText("本当に終了しますか?");

        Stage stage = (Stage) alert.getDialogPane().getScene().getWindow();
        stage.getIcons().add(new Image(this.getClass().getResource("question.png").toString()));

        Optional<ButtonType> result = alert.showAndWait();
        if (result.get() == ButtonType.OK) {
            System.exit(0);
        } else {
            t.consume();
        }
    }

    public static void main(String[] args) {
        launch(args);
    }

}

実行例を以下に示します。

参考サイト

  1. JavaFX 8u40 のダイアログを探る - Programming Studio
  2. JavaFX Dialogs (official) | code.makery.ch
  3. Dialog (JavaFX 8)
  4. javafx - How do you set the icon of a Dialog control Java FX/Java 8 - Stack Overflow

 

0 件のコメント: