Java - 如何创建自定义对话框?
Posted
技术标签:
【中文标题】Java - 如何创建自定义对话框?【英文标题】:Java - How to create a custom dialog box? 【发布时间】:2010-10-21 19:55:45 【问题描述】:我在 JFrame 上有一个按钮,单击该按钮时我希望弹出一个对话框,其中包含多个文本区域供用户输入。我一直在四处寻找,试图弄清楚如何做到这一点,但我越来越困惑。有人可以帮忙吗?
【问题讨论】:
【参考方案1】:如果您不需要太多的自定义行为方式,JOptionPane 是一个很好的节省时间的方法。它负责确定/取消选项的放置和本地化,并且是一种快速而简单的方式来显示自定义对话框,而无需定义您自己的类。大多数情况下,JOptionPane 中的“消息”参数是一个字符串,但您也可以传入一个 JComponent 或 JComponent 数组。
例子:
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);
【讨论】:
不幸的是,此示例不支持例如在字段之间切换或按 Enter 键“确定”。 您可以通过使用构造函数创建 JOptionPane,然后在生成的 JOptionPane 上调用 createDialog 来获得对对话框的更多控制。这为您提供了一个 JDialog,您可以在使其可见之前对其进行进一步自定义。但在某些时候,滚动您自己的自定义组件会更有意义。 @aioobe 在我的 JRE 中,在我的 JRE 中,使用 Tab 键和按 Enter 键都可以正常工作(尽管自您发表评论以来已经过了很长时间)。但是,此解决方案还有另一个缺点:无法区分按下 OK 按钮和关闭对话框窗口。因此无法取消您的操作。 @Vic,您可以使用 JOptionPane.showConfirmDialog 代替 JOptionPane.showMessageDialog。我已经更新了示例,谢谢!【参考方案2】:试试这个简单的类来自定义你喜欢的对话框:
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>";
【讨论】:
【参考方案3】:Java 教程中的This lesson 详细解释了每个 Swing 组件,并附有示例和 API 链接。
【讨论】:
【参考方案4】:如果你使用NetBeans IDE(目前最新版本是6.5.1),你可以使用它来创建一个基本的GUI java应用程序,使用File->New Project并选择Java类别然后选择Java Desktop Application。
创建后,您将拥有一个简单的基本 GUI 应用程序,其中包含一个可以使用菜单选择打开的关于框。您应该能够根据自己的需要进行调整,并了解如何通过单击按钮打开对话框。
您将能够直观地编辑对话框。删除那里的项目并添加一些文本区域。如果您遇到困难,请尝试一下并提出更多问题:)
【讨论】:
【参考方案5】:好吧,您实际上是创建一个 JDialog,添加您的文本组件并使其可见。如果您缩小您遇到问题的具体部分,这可能会有所帮助。
【讨论】:
【参考方案6】:我创建了一个自定义对话框 API。在这里查看https://github.com/MarkMyWord03/CustomDialog。它支持消息和确认框。类似 joptionpane 中的输入和选项对话框即将实现。
来自 CUstomDialog API 的示例错误对话框: CustomDialog Error Message
【讨论】:
以上是关于Java - 如何创建自定义对话框?的主要内容,如果未能解决你的问题,请参考以下文章