2 回答
TA贡献1784条经验 获得超7个赞
您确实更改了有关right警报的按钮类型。您的最后一行不会更改wrong警报按钮。替换right为wrong将针对正确的警报,从而更改其按钮。
可以通过多种方式检查按下了哪个按钮。摘自官方文档(https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/Alert.html):
选项 1:“传统”方法
Optional<ButtonType> result = alert.showAndWait();
if (result.isPresent() && result.get() == ButtonType.OK) {
formatSystem();
}
选项 2:传统 + Optional 方法
alert.showAndWait().ifPresent(response -> {
if (response == ButtonType.OK) {
formatSystem();
}
});
选项 3:完全 lambda 方法
alert.showAndWait()
.filter(response -> response == ButtonType.OK)
.ifPresent(response -> formatSystem());
而不是使用ButtonType.OK您需要使用您的自定义按钮。
编辑
在您的示例中,您必须像这样修改代码:
void clear() {
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
if (digging_array[i][j] == 1) {
sudoku[i][j].setText(Integer.toString(final_Array[i][j]));
} else {
sudoku[i][j].setText("");
}
}
}
}
Optional<ButtonType> result = right.showAndWait();
if (result.isPresent() && result.get() == quit) {
stage.setScene(main_frame);
} else if(result.isPresent() && result.get() == restart) {
clear()
}
Optional<ButtonType> result = wrong.showAndWait();
if (result.isPresent() && result.get() == quit) {
stage.setScene(main_frame);
} else if(result.isPresent() && result.get() == retry) {
clear()
}
TA贡献1847条经验 获得超11个赞
在链接的教程中,有一个关于如何设置自定义操作的示例(我将其缩短了一点):
Alert alert = new Alert(AlertType.CONFIRMATION);
alert.setTitle("Confirmation Dialog with Custom Actions");
ButtonType buttonTypeOne = new ButtonType("One");
ButtonType buttonTypeCancel = new ButtonType("Cancel", ButtonData.CANCEL_CLOSE);
alert.getButtonTypes().setAll(buttonTypeOne, buttonTypeCancel);
Optional<ButtonType> result = alert.showAndWait();
if (result.get() == buttonTypeOne){
// ... user chose "One"
} else {
// ... user chose CANCEL or closed the dialog
}
您可以通过result.get()并检查按下了哪个按钮(buttonTypeOne,buttonTypeCancel,...)来获取结果(用户单击的内容)。
当用户按下“One”时,您现在可以在 if 语句的第一个主体中执行某些操作。
在您的代码中,您错过了showAndWait()电话。例如,如果用户是对的,你应该这样做:
Observable<ButtonType> rightResult = right.showAndWait();
if (rightResult.isPresent()) {
if (rightResult.get() == restart) { //because "restart" is the variable name for your custom button type
// some action, method call, ...
} else { // In this case "quit"
}
}
请注意,这可能不是最优雅的方式(双重 if 语句)。@Others 可以随意编辑我的答案并采用更好的方法来做到这一点。
添加回答
举报