JavaFX 2.1 MessageBox

Добрый день!

Я разрабатываю программу с использованием JavaFX SDK. Я хотел иметь окно сообщения, как в С#:

DialogResult rs = MessageBox.showDialog("Message Here...");
if (rs == ....) {
    // code
}

Я хочу иметь такую ​​функциональность, используя JavaFX SDK. Ответы очень ценятся.

Ответ 1

Update

Как и в Java8u40, основные библиотеки JavaFX включают в себя диалоговое окно (окно сообщения). Обратитесь к документации для следующих классов:

Оригинальный ответ

Ниже приведен пример диалогового окна Modal Confirm. Он работает, создавая сцену, содержащую сцену, с содержимым диалога в ней, а затем вызывает show() в Сцене.

Если вы хотите, чтобы основной поток обработки приостанавливался, пока отображается новая сцена, а вы используете JavaFX 2.2+, вы можете вызывать showAndWait() на сцене, а не показывать. Модифицированный для использования show и wait и просто отображение сообщения и кнопки ok, тогда обработка должна действовать очень похоже на С# MessageBox.

Если вам нужна профессионально выглядящая коробка сообщений для Java 8, я рекомендую использовать диалоги из библиотеки ControlsFX, которая представляет собой более позднюю итерацию диалоги в панели управления JavaFX UI Controls, упомянутые в ответе blo0p3r.

Ответ 2

https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/Alert.html

Класс Alert подклассифицирует класс Dialog и обеспечивает поддержку ряда предварительно созданных типов диалоговых окон, которые могут легко показать пользователям запрос на ответ.

Итак, код выглядит примерно как

Alert alert = new Alert(AlertType.INFORMATION);
alert.setTitle("Message Here...");
alert.setHeaderText("Look, an Information Dialog");
alert.setContentText("I have a great message for you!");
alert.showAndWait().ifPresent(rs -> {
    if (rs == ButtonType.OK) {
        System.out.println("Pressed OK.");
    }
});

Ответ 3

MessageBox на JavaFX 2.2 OSS здесь

Я думаю, это поможет вам.

MessageBox.show(primaryStage,
    "Message Body",
    "Message Title", 
    MessageBox.ICON_INFORMATION | MessageBox.OK | MessageBox.CANCEL);

Ответ 5

Это то, что я использовал, что является частью JavaFX UI Controls Sandbox, как было объявлено здесь об опыте FX:

Это приятный и простой в использовании диалог. Нельзя сравнивать с другими, поскольку это единственный, который я использовал. Нет проблем с этим.

Код очень краткий. Выглядит так:

//calling from a different controller and don't have the scene object loaded.
Stage stage = (Stage)deleteButton.getScene().getWindow();
DialogResponse response = Dialogs.showConfirmDialog(stage, "Are you sure ...", "Confirm deletion","Delete?", DialogOptions.OK_CANCEL);
if(response == DialogResponse.OK) {
    //...
}

Ответ 6

Используйте пространство имен:

import javafx.scene.control.Alert;

Вызов из основного потока:

public void showAlert() { 
    Alert alert = new Alert(Alert.AlertType.INFORMATION);
    alert.setTitle("Message Here...");
    alert.setHeaderText("Look, an Information Dialog");
    alert.setContentText("I have a great message for you!");
    alert.showAndWait();
}

Вызов из основного потока:

public void showAlert() {
    Platform.runLater(new Runnable() {
      public void run() {
          Alert alert = new Alert(Alert.AlertType.INFORMATION);
          alert.setTitle("Message Here...");
          alert.setHeaderText("Look, an Information Dialog");
          alert.setContentText("I have a great message for you!");
          alert.showAndWait();
      }
    });
}

Ответ 7

В данный момент я использую эту библиотеку для отображения диалоговых окон. Возможно, это может быть полезно для вас:

https://github.com/4ntoine/JavaFxDialog