如何在Javafx中使用警报中的按钮而不使用.stopAndWait方法?

如何在Javafx中使用警报中的按钮而不使用.stopAndWait方法?,java,javafx,javafx-8,Java,Javafx,Javafx 8,我正在尝试用javafx创建一个游戏,当你赢了,会弹出一个提示,说你赢了,并且可以选择再次玩或者关闭程序。 问题是要在警报窗口中使用按钮,您必须使用alert.stopAndWait(),它不适用于时间线 有没有其他方法可以不使用此方法来控制按钮,或者有没有更好的方法来编写此代码 提前谢谢你 编辑: 以下是迄今为止我的警报代码: public static void alert(Alert.AlertType alertType, Window owner, String title, Str

我正在尝试用javafx创建一个游戏,当你赢了,会弹出一个提示,说你赢了,并且可以选择再次玩或者关闭程序。 问题是要在警报窗口中使用按钮,您必须使用alert.stopAndWait(),它不适用于时间线

有没有其他方法可以不使用此方法来控制按钮,或者有没有更好的方法来编写此代码

提前谢谢你

编辑: 以下是迄今为止我的警报代码:

 public static void alert(Alert.AlertType alertType, Window owner, String title, String message) {
    Alert alert = new Alert(alertType);
    alert.setHeaderText(null);
    alert.setTitle(title);
    alert.setContentText(message);
    alert.initOwner(owner);
    alert.show();
    ButtonType buttonPlayAgain = new ButtonType("Play again");
    alert.getButtonTypes().setAll(buttonPlayAgain);
    alert.setOnHidden(evt -> Platform.exit());

    Optional<ButtonType> result = alert.showAndWait();
    if (result.get() == buttonPlayAgain){
        // ... user chose Play Again"
        System.out.println("play again");
    } else
        Platform.exit();
        // if user clicks exit
公共静态无效警报(alert.AlertType-AlertType、窗口所有者、字符串标题、字符串消息){
警报警报=新警报(警报类型);
alert.setHeaderText(空);
警报。设置标题(标题);
alert.setContentText(消息);
警报。初始所有者(所有者);
alert.show();
ButtonType ButtonPlayGain=新的ButtonType(“再次播放”);
alert.getButtonTypes().setAll(buttonPlayAgain);
alert.setOnHidden(evt->Platform.exit());
可选结果=alert.showAndWait();
if(result.get()==按钮增益){
//…用户再次选择“播放”
System.out.println(“再次播放”);
}否则
Platform.exit();
//如果用户单击退出
问题是您无法将showAndWait与时间线一起使用。我正在尝试找到使用showAndWait的替代方法。

您可以使用
show()
方法,但您需要在关闭
警报后通过设置
onCloseRequest()
处理程序来检索结果

然后,您可以确定使用
alert.getResult()方法单击了哪个按钮

下面是一个简单的程序来演示:

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Main extends Application {

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

    @Override
    public void start(Stage primaryStage) {

        // Simple interface
        VBox root = new VBox(5);
        root.setPadding(new Insets(10));
        root.setAlignment(Pos.CENTER);

        // Button to show an alert
        Button btnShowAlert = new Button("Show Alert!");

        // Setup the button action
        btnShowAlert.setOnAction(event -> {

            // Create a simple Alert
            Alert alert = new Alert(Alert.AlertType.NONE);
            alert.setHeaderText(null);
            alert.setTitle("Just a title");
            alert.setContentText("A fun message");
//            alert.initOwner(owner); // Remove for this sample

            ButtonType buttonPlayAgain = new ButtonType("Play again");
            alert.getButtonTypes().setAll(buttonPlayAgain);
//            alert.setOnHidden(evt -> Platform.exit()); // Don't need this

            // Listen for the Alert to close and get the result
            alert.setOnCloseRequest(e -> {
                // Get the result
                ButtonType result = alert.getResult();
                if (result != null && result == buttonPlayAgain) {
                    System.out.println("Play Again!");
                } else {
                    System.out.println("Quit!");
                }
            });

            alert.show();

        });

        root.getChildren().add(btnShowAlert);

        // Show the Stage
        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }
}

为什么必须使用
showAndWait()
要使用
按钮
?您只需使用
平台。runLater
即可。也可以使用
显示
,但如果您想得到结果,您需要添加一些侦听器。@Zephyr在javafx中使用警报时,我看到的唯一方法是使用警报类中显示的按钮use show and Wait,最常见的方法是可选结果=alert.showAndWait();为什么不直接将事件添加到按钮?我没有使用按钮来显示警报。我使用的是警报内部的按钮,它不是重要的按钮…它只是显示带有按钮的警报。我必须在示例中以某种方式显示警报…您是否尝试运行该示例?;)您给出的示例与我尝试的内容无关我要做。请看我对原始帖子的编辑。
警报
是一个
警报
,无论你如何设计它。概念是一样的。