我创建了一个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");
}
}
运行上述应用程序时,会显示两个对话框。点击&#34;是&#34;在第一个对话框上,然后关闭(通过单击&#34; x&#34;在右上角)第二个。通过采取上述步骤,我希望应用程序将打印以下内容:
是的
没有或关闭
然而,我实际看到的是:
是的
是
Dialog documentation表示&#34;异常关闭条件&#34; (例如单击右上角的小&#34; x&#34;)&#34;尝试将result属性设置为使用第一个匹配的ButtonType调用结果转换器返回的任何值。&# 34;鉴于此声明的上下文,我解释了#34;匹配ButtonType&#34;表示一个ButtonType(从文档中直接引用):
- 该按钮有一个ButtonType,其ButtonBar.ButtonData的类型为ButtonBar.ButtonData.CANCEL_CLOSE。
- 该按钮有一个ButtonType,当调用ButtonBar.ButtonData.isCancelButton()时,ButtonBar.ButtonData返回true。
醇>
我对文档的解释是否不正确,或者这是JavaFX中的错误?无论为什么这不能按照我的预期工作,我有什么方法可以强迫&#34;异常关闭条件&#34;在这种情况下返回ButtonType.NO
?
答案 0 :(得分:1)
这是JavaFX中的另一个错误。我已向Oracle报告,并为其分配了错误ID JDK-8173114。作为解决方法,我只是将以下行添加到我的JavaFX Alert
子类的构造函数中:
setOnShowing(event -> setResult(null));
上述解决方法似乎适用于Alert
,ChoiceDialog
和TextInputDialog
。
答案 1 :(得分:0)
以上解决方法不适用于Java 8&Win10。但这可以工作:
module.exports = {
bracketSpacing: true,
trailingComma: "es5",
tabWidth: 2,
semi: false,
singleQuote: false,
}