我浏览了一些文档这里和这里,发现胶子对话框可以*有一个泛型类型,这将是调用showAndWait()时要返回的对象的泛型类型。但是胶子警报(com.gluonhq.charm.glisten.control.Alert
是com.gluonhq.charm.glisten.control.Dialog
的一个子类)似乎没有泛型类型,也不允许您给它泛型。
当我试图将setOnHidden
调用为:
boolean shown;
String report = "";
Alert al = new Alert(AlertType.ERROR);
al.setContentText(report);
al.setAutoHide(false);
al.setOnHidden(e->{
shown = false;
});
shown = true;
al.showAndWait();
我在setOnHidden()调用中得到了以下警告:
方法setOnHidden(EventHandler)属于原始类型对话框。应该参数化对泛型类型对话框的引用。
任何关于胶子对话框的澄清或消除警告的方法都是最受欢迎的。
发布于 2018-10-03 20:01:11
与内置JavaFX Alert
控件一样,胶子Alert
控件的隐式类型是相同的: JavaFX内置ButtonType
,因此如果单击OK按钮,它将返回ButtonType.OK
。
正如您在Alert
JavaDoc上看到的那样,该控件有一个或两个默认按钮:一个用于所有这些按钮的OK
按钮,以及一个用于确认警报的Cancel
按钮。这些按钮的默认结果都是ButtonType.OK
和ButtonType.CANCEL
。
因此,这对于两个Alert
控件都有效:
alert.showAndWait().ifPresent(result -> {
if (result == ButtonType.OK) {
// do something;
}
});
使用“确定”和“取消”按钮,您将注意到一件事:警报将被解除,因此您不必这样做。
您还可以提供自定义按钮。那么您需要处理调用hide()
的问题
final Button myYesButton = new Button("Yes");
myYesButton.setOnAction(event -> {
alert.setResult(ButtonType.YES);
alert.hide();
});
alert.getButtons().add(myYesButton);
关于setOnHidden
,见Javadoc。它需要一个LifecycleEvent
alert.setOnHidden((LifecycleEvent event) -> System.out.println("alert hidden"));
但你可以用:
alert.setOnHidden(event -> System.out.println("alert hidden"));
最后,确保您正在导入正确的控件:
import com.gluonhq.charm.glisten.control.Alert;
...
Alert alert = new Alert(javafx.scene.control.Alert.AlertType.ERROR);
https://stackoverflow.com/questions/52634150
复制相似问题