首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaFX异常关闭警报返回不正确的结果

JavaFX异常关闭警报返回不正确的结果
EN

Stack Overflow用户
提问于 2017-01-12 01:05:11
回答 2查看 576关注 0票数 2

我已经创建了一个JavaFX Alert对象,它在调用showAndWait时返回意外的结果。下面的代码说明了我所观察到的行为:

代码语言:javascript
运行
复制
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 (直接引用文档):

  1. 该按钮有一个ButtonType,其ButtonBar.ButtonData类型为ButtonBar.ButtonData.CANCEL_CLOSE。
  2. 该按钮有一个ButtonType,其ButtonBar.ButtonData在调用ButtonBar.ButtonData.isCancelButton()时返回true。

我对文档的解释是不正确的,还是JavaFX中的一个错误?不管为什么不像我所期望的那样工作,在这种情况下,我是否可以强制“异常关闭条件”返回ButtonType.NO

EN

Stack Overflow用户

发布于 2019-11-29 00:32:40

以上解决方案不适用于java 8& win 10。

代码语言:javascript
运行
复制
    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){
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41603504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档