什么是gluon Alert通用类型?

时间:2018-10-03 19:12:09

标签: javafx gluon

我浏览了一些文档herehere,发现胶子对话框Can *具有通用类型,该通用类型将是调用showAndWait()时要返回的对象的通用类型。但是胶子警报(com.gluonhq.charm.glisten.control.Alertcom.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的引用应参数化

欢迎您对胶子对话框或摆脱警告的方式进行任何澄清。

1 个答案:

答案 0 :(得分:1)

就像内置的JavaFX Alert控件一样,Gluon的Alert控件的隐式类型是相同的:JavaFX内置的ButtonType,因此,如果单击“确定”,按钮,它将返回ButtonType.OK

如您在Alert JavaDoc上看到的,该控件具有一个或两个默认按钮:一个用于所有按钮的OK按钮,一个用于所有按钮的Cancel按钮确认警报。每个按钮的默认结果为ButtonType.OKButtonType.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);