javax.swing.JOptionPane
这是我在想要弹出信息框时调用的方法的代码,它会一直占用屏幕直到被接受:
import javax.swing.JOptionPane;
public class ClassNameHere
{
public static void infoBox(String infoMessage, String titleBar)
{
JOptionPane.showMessageDialog(null, infoMessage, "InfoBox: " + titleBar, JOptionPane.INFORMATION_MESSAGE);
}
}
第一个JOptionPane 参数(本例中为null)用于对齐对话框。 null 使其在屏幕上居中,但是可以指定任何java.awt.Component,对话框将出现在该Component 的中心。
我倾向于使用 titleBar 字符串来描述从代码中调用框的位置,这样如果它变得烦人,我可以轻松地追踪并删除负责使用 infoBoxes 向我的屏幕发送垃圾邮件的代码。
要使用这个方法调用:
ClassNameHere.infoBox("YOUR INFORMATION HERE", "TITLE BAR MESSAGE");
javafx.scene.control.Alert
有关如何使用 JavaFX 对话框的详细说明,请参阅:JavaFX Dialogs (official) by code.makery。它们比 Swing 对话框更强大、更灵活,而且功能远不止弹出消息。
如上所述,我将发布一个小示例,说明如何使用 JavaFX 对话框来实现相同的结果
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.application.Platform;
public class ClassNameHere
{
public static void infoBox(String infoMessage, String titleBar)
{
/* By specifying a null headerMessage String, we cause the dialog to
not have a header */
infoBox(infoMessage, titleBar, null);
}
public static void infoBox(String infoMessage, String titleBar, String headerMessage)
{
Alert alert = new Alert(AlertType.INFORMATION);
alert.setTitle(titleBar);
alert.setHeaderText(headerMessage);
alert.setContentText(infoMessage);
alert.showAndWait();
}
}
要记住的一点是,JavaFX 是一个单线程 GUI 工具包,这意味着应该直接从 JavaFX 应用程序线程调用此方法。如果您有另一个线程在工作,需要一个对话框,请查看这些 SO Q&As:JavaFX2: Can I pause a background Task / Service? 和 Platform.Runlater and Task Javafx。
要使用这个方法调用:
ClassNameHere.infoBox("YOUR INFORMATION HERE", "TITLE BAR MESSAGE");
或
ClassNameHere.infoBox("YOUR INFORMATION HERE", "TITLE BAR MESSAGE", "HEADER MESSAGE");