我已经创建了一个JavaFX Alert对象,它在调用showAndWait时返回意外的结果。下面的代码说明了我所观察到的行为:
package myPackage;
import java.util.Optional;
import javafx.application.Application;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.ButtonBar.ButtonData;
import javafx.scene.control.ButtonType;
import javafx.stage.Stage;
public class Main extends Application {
public static void main(final String[] args) {
launch();
}
private static boolean isYes(final Optional<ButtonType> result) {
return (result.isPresent() && result.get().getButtonData() == ButtonData.YES);
}
@Override
public void start(Stage primaryStage) throws Exception {
final Alert alert = new Alert(AlertType.CONFIRMATION,
"This is a test", ButtonType.NO, ButtonType.YES);
System.out.println(isYes(alert.showAndWait()) ? "Yes" : "No or Closed");
System.out.println(isYes(alert.showAndWait()) ? "Yes" : "No or Closed");
}
}当我运行上面的应用程序时,会显示两个对话框。在第一个对话框中单击“是”,然后关闭第二个对话框(单击右上角的"x“)。通过执行上述步骤,我希望应用程序将打印以下内容:
是 否或已关闭
然而,我所看到的实际印刷是:
是 是
对话文档声明,“异常关闭条件”(例如单击右上角的小"x“)将”尝试将结果属性设置为使用第一个匹配的ButtonType调用结果转换器返回的任何值“。考虑到该语句的上下文,我将“匹配ButtonType”解释为指一个ButtonType (直接引用文档):
我对文档的解释是不正确的,还是JavaFX中的一个错误?不管为什么不像我所期望的那样工作,在这种情况下,我是否可以强制“异常关闭条件”返回ButtonType.NO?
发布于 2019-11-29 00:32:40
以上解决方案不适用于java 8& win 10。
Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
// alert.setOnShowing(event -> alert.setResult(null));
alert.setTitle("Delete similar files?");
ButtonType okButton = new ButtonType("Yes", ButtonBar.ButtonData.YES);
ButtonType noButton = new ButtonType("No", ButtonBar.ButtonData.NO);
ButtonType cancelButton = new ButtonType("Cancel", ButtonBar.ButtonData.CANCEL_CLOSE);
alert.getButtonTypes().setAll(okButton, noButton, cancelButton);
Optional<ButtonType> choose = alert.showAndWait();
// String text = new String("");
// if (choose.get() != null)
// text = choose.get().getText();
// if (text != null && (text.equals("YES") || text.equals("Yes")))
if (choose.get() == okButton){https://stackoverflow.com/questions/41603504
复制相似问题