Что такое родовой тип Alut Alert? - PullRequest
0 голосов
/ 03 октября 2018

Я просмотрел некоторые документы здесь и здесь и обнаружил, что глюонные диалоги могут * иметь универсальный тип, который будет универсальным типом объекта, возвращаемого при вызове 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 должны быть параметризованы

Любые разъяснения о глюонных диалогах или способах избавления от предупреждения приветствуются.

1 Ответ

0 голосов
/ 03 октября 2018

Как и во встроенном элементе управления JavaFX Alert, неявный тип элемента управления Alert Gluon такой же: встроенный в JavaFX ButtonType, поэтому, если вы нажмете кнопку OK, он вернет ButtonType.OK.

Как вы можете видеть на Alert JavaDoc , элемент управления имеет одну или две кнопки по умолчанию: кнопку OK для всех из них и Cancelкнопка для подтверждения подтверждения.Каждая из этих кнопок имеет по умолчанию результат ButtonType.OK и ButtonType.CANCEL.

Так что это работает для обоих Alert элементов управления:

alert.showAndWait().ifPresent(result -> {
   if (result == ButtonType.OK) {
       // do something;
   }
});

Одна из вещей, которую вы заметите с обоимиКнопки OK и Отмена: оповещение будет отклонено, поэтому вам не нужно делать это.

Вы также можете предоставить свои пользовательские кнопки.Тогда вам нужно позаботиться о том, чтобы позвонить 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);
...