我正尝试在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
问题是您不能将showAndWait与时间轴一起使用。我正在尝试找到替代方法来使用showAndWait。
答案 0 :(得分:1)
您可以使用show()
方法,但是您需要在Alert
关闭后通过设置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();
}
}