我浏览了一些文档here和here,发现胶子对话框Can *具有通用类型,该通用类型将是调用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)方法属于原始类型Dialog。泛型类型Dialog的引用应参数化
欢迎您对胶子对话框或摆脱警告的方式进行任何澄清。
答案 0 :(得分:1)
就像内置的JavaFX Alert
控件一样,Gluon的Alert
控件的隐式类型是相同的:JavaFX内置的ButtonType
,因此,如果单击“确定”,按钮,它将返回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);