0

JavaFX アプリで ControlFx のダイアログ ボックスを使用しています。ただし、[キャンセル] ボタンをクリックすると、アプリケーションが閉じます。

package testing;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import org.controlsfx.control.action.Action;
import org.controlsfx.dialog.Dialog;
import org.controlsfx.dialog.Dialogs;

public class NewFXMain extends Application {

@Override
public void start(Stage primaryStage) {
    Button btn = new Button();
    btn.setText("Say 'Hello World'");
    btn.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle(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();
    primaryStage.setOnCloseRequest(new EventHandler() {
        public void handle(Event t) {
            Action response = Dialogs.create()
                    .owner(new Stage())
                    .title("Exit ??")
                    .masthead("Do you want to Exit ??")
                    .actions(Dialog.Actions.OK, Dialog.Actions.CANCEL)
                    .showConfirm();

            if (response == Dialog.Actions.OK) {
                primaryStage.hide();
                System.exit(0);
// ... user chose OK
            } else if (response == Dialog.Actions.CANCEL){

            }

        }
    });

}

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    launch(args);
}

}

間違った方法で実装していますか、それとも conrolfx のバグですか? 警告ダイアログも試してみましたが、そこでも同じことが起こります。また、YES、NO、およびキャンセル アクションを含む他のダイアログも試しました。ubuntu 14.04でjdk 8でnetbeans 8.0を使用しています。

4

1 に答える 1

2

OK、インターネットを検索してこれを取得しました。イベントを消費するだけで、primarystage は終了しません。

primaryStage.setOnCloseRequest(new EventHandler() {
    public void handle(Event t) {
        t.consume();
        Action response = Dialogs.create()
                .owner(new Stage())
                .title("Exit ??")
                .masthead("Do you want to Exit ??")
                .actions(Dialog.Actions.OK, Dialog.Actions.CANCEL)
                .showConfirm();

        if (response == Dialog.Actions.OK) {
            primaryStage.close();
            System.exit(0);

        } else if (response == Dialog.Actions.CANCEL){

        }

    }
});

非常にマイナーでばかげた間違いのように見えます。:P

于 2014-07-24T10:31:23.950 に答える