Java – 如何创build一个自定义对话框?

我有一个单击JFrame上的button,我想要一个对话框popup与多个文本区域用户input。 我一直在四处寻找,试图找出如何做到这一点,但我一直在困惑。 谁能帮忙?

如果你不需要太多的自定义行为,JOptionPane是一个很好的节省时间。 它负责确定/取消选项的位置和本地化,并且是一种快捷方式来显示自定义对话框,而无需定义自己的类。 大多数情况下,JOptionPane中的“message”参数是一个string,但是您也可以传入JComponent或JComponents数组。

例:

JTextField firstName = new JTextField(); JTextField lastName = new JTextField(); JPasswordField password = new JPasswordField(); final JComponent[] inputs = new JComponent[] { new JLabel("First"), firstName, new JLabel("Last"), lastName, new JLabel("Password"), password }; int result = JOptionPane.showConfirmDialog(null, inputs, "My custom dialog", JOptionPane.PLAIN_MESSAGE); if (result == JOptionPane.OK_OPTION) { System.out.println("You entered " + firstName.getText() + ", " + lastName.getText() + ", " + password.getText()); } else { System.out.println("User canceled / closed the dialog, result = " + result); } 

Java教程中的这一课详细解释了每个Swing组件,并附有示例和API链接。

如果您使用NetBeans IDE (目前最新版本为6.5.1),则可以使用它来使用File-> New Project创build基本的GUI Java应用程序,然后selectJava类别,然后selectJava Desktop Application。

一旦创build,您将拥有一个简单的骨骼GUI应用程序,其中包含可以使用菜单select打开的关于框。 你应该能够适应你的需求,并学习如何从点击button打开对话框。

您将能够以可视方式编辑对话框。 删除那里的项目并添加一些文本区域。 玩它,并回来更多的问题,如果你卡住了:)

那么,你基本上创build一个JDialog,添加你的文本组件,并使其可见。 如果你缩小了你遇到的问题,可能会有所帮助。

试试这个简单的类来自定义对话框:

 import java.util.ArrayList; import java.util.List; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JRootPane; public class CustomDialog { private List<JComponent> components; private String title; private int messageType; private JRootPane rootPane; private String[] options; private int optionIndex; public CustomDialog() { components = new ArrayList<>(); setTitle("Custom dialog"); setMessageType(JOptionPane.PLAIN_MESSAGE); setRootPane(null); setOptions(new String[] { "OK", "Cancel" }); setOptionSelection(0); } public void setTitle(String title) { this.title = title; } public void setMessageType(int messageType) { this.messageType = messageType; } public void addComponent(JComponent component) { components.add(component); } public void addMessageText(String messageText) { JLabel label = new JLabel("<html>" + messageText + "</html>"); components.add(label); } public void setRootPane(JRootPane rootPane) { this.rootPane = rootPane; } public void setOptions(String[] options) { this.options = options; } public void setOptionSelection(int optionIndex) { this.optionIndex = optionIndex; } public int show() { int optionType = JOptionPane.OK_CANCEL_OPTION; Object optionSelection = null; if(options.length != 0) { optionSelection = options[optionIndex]; } int selection = JOptionPane.showOptionDialog(rootPane, components.toArray(), title, optionType, messageType, null, options, optionSelection); return selection; } public static String getLineBreak() { return "<br>"; } } 

我创build了一个自定义对话框API。 看看这里https://github.com/MarkMyWord03/CustomDialog 。 它支持消息和确认框。 input和选项对话框就像在joptionpane中将很快实施。

来自CUstomDialog API的示例错误对话框: CustomDialog错误消息