如何在Javafx中使用警报中的按钮而不使用.stopAndWait方法?
我正在尝试用javafx创建一个游戏,当你赢了,会弹出一个提示,说你赢了,并且可以选择再次玩或者关闭程序。 问题是要在警报窗口中使用按钮,您必须使用alert.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
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();为什么不直接将事件添加到按钮?我没有使用按钮来显示警报。我使用的是警报内部的按钮,它不是重要的按钮…它只是显示带有按钮的警报。我必须在示例中以某种方式显示警报…您是否尝试运行该示例?;)您给出的示例与我尝试的内容无关我要做。请看我对原始帖子的编辑。警报
是一个警报
,无论你如何设计它。概念是一样的。