代码之家  ›  专栏  ›  技术社区  ›  Ahmad Shahwan

JavaFX Dialog getResult()方法未返回正确的泛型类型

  •  1
  • Ahmad Shahwan  · 技术社区  · 7 年前

    我在处理JavaFX时遇到了一个问题 Dialog<R> 班级。我创建了一个带有自定义类型参数的对话框,比如 String ClassCastException .

    以这个简单的JavaFX应用程序为例:

    @Override
    public void start(Stage primaryStage) {
        Dialog<String> dialog = new Dialog<>();
        dialog.getDialogPane().getButtonTypes().setAll(ButtonType.OK);
        String result = dialog.showAndWait().orElse(null);
    }
    

    Caused by: java.lang.ClassCastException: javafx.scene.control.ButtonType cannot be cast to java.lang.String
    

    ButtonType . 不是你所期望的知道方法签名的类型。

    getResult()

    我使用Oracle的jvm1.8.0。

    谢谢你的真知灼见。

    1 回复  |  直到 7 年前
        1
  •  3
  •   Kiril Tonev    7 年前

    这个 Dialog API 如果类型不是,则需要设置结果转换器回调 Void ButtonType

    @Override
    public void start(Stage primaryStage) {
        Dialog<String> dialog = new Dialog<>();
        dialog.getDialogPane().getButtonTypes().setAll(ButtonType.OK);
        dialog.setResultConverter(ButtonType::getText);
        String result = dialog.showAndWait().orElse(null);
        System.out.println(result);
    }
    

    在上面的片段中, result 持有价值 OK 钮扣类型 作为类型参数。如果要从 Dialog ,更惯用的方法是将事件附加到OK按钮,对输入执行验证,并在事件处理程序中计算结果对象。文件列出了实现这一点的三种方法。