JavaFX2.1消息框

JavaFX2.1消息框,java,javafx,javafx-2,Java,Javafx,Javafx 2,你好 我正在使用JavaFXSDK开发一个程序。我想要一个像C#那样的消息框: 我想使用JavaFXSDK实现这样的功能。非常感谢您的回答。更新 从Java8u40开始,核心JavaFX库包括对话框(消息框)功能。请参阅以下类别的文档: (和子类) 有关如何使用警报类的快速信息,请参阅此问题的其他答案: 有关更长的教程,请参阅(强烈建议使用本教程) 原始答案 下面是一个对话框示例。它的工作原理是创建一个包含对话框内容的场景的舞台,然后在场景上调用show() 如果您希望主处理线程在

你好
我正在使用JavaFXSDK开发一个程序。我想要一个像C#那样的消息框:

我想使用JavaFXSDK实现这样的功能。非常感谢您的回答。

更新

从Java8u40开始,核心JavaFX库包括对话框(消息框)功能。请参阅以下类别的文档:

  • (和子类)
有关如何使用
警报
类的快速信息,请参阅此问题的其他答案:

有关更长的教程,请参阅(强烈建议使用本教程)

原始答案

下面是一个对话框示例。它的工作原理是创建一个包含对话框内容的场景的舞台,然后在场景上调用show()

如果您希望主处理线程在显示新阶段时暂停,并且您正在使用JavaFX 2.2+,那么您可以在阶段上调用showAndWait(),而不是show。修改为使用show and wait,只显示一条消息和ok按钮,然后处理应该与C#MessageBox非常相似


如果您希望Java 8具有专业外观的消息框,我建议使用中的对话框,这是blo0p3r回答中提到的JavaFX UI控件沙盒中对话框的后续迭代。

目前我使用此库来显示对话框。也许它对你有用:


OSS提供的JavaFX2.2上的MessageBox是

我想这会对你有帮助

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

下面是另一个简单的选择:


令人惊讶的是,JavaFX2.2中仍然没有可用的标准消息框。这就是我最终使用的消息框,它是FX体验中宣布的消息框的一部分:

  • 链接到教程:
  • 链接到源代码:
这是一个非常好用的对话框。无法与其他人相比,因为这是我唯一使用过的。没问题

代码非常简洁。看起来像这样:

//从其他控制器调用,但未加载场景对象。
Stage Stage=(Stage)deleteButton.getScene().getWindow();
DialogResponse response=Dialogs.showConfirmDialog(阶段“确定…”、“确认删除”、“删除?”、DialogOptions.OK\u取消);
if(response==DialogResponse.OK){
//...
}

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.");
    }
});
使用名称空间:

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();
      }
    });
}
从非主线程调用:

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();
      }
    });
}

这是一个非常简单的例子:
Alert Alert=新警报(AlertType.CONFIRMATION,“您确定要继续吗?”)

我目前正在使用JavaFX2.1,而showAndWait()方法在stage类中不可用?当messagebox仍然显示时,如何暂停线程以读取下一行代码?!您不能直接使用2.1公共API,必须在回调事件处理程序中编写延续代码,如链接的示例代码所示。鉴于许可问题、专业性和可用性,此处链接的要点片段似乎是JavaFX2.x对话框的最佳选项。遗憾的是,ControlsFX根本无法在商业上使用,因为大多数公司都不能冒险要求客户/用户安装JRE8,直到Oracle正式发布(这篇文章发布至今已有多年)。