我尝试使用来自用户的输入创建自定义对话框,在每个步骤(输入)之后验证信息,如果它正确,则会出现一个新面板,并且用户可以继续添加信息。要做到这一点,我使用JOptionPane。我将有三个按钮" Ok",仅当用户通过整个输入过程时启用," Next",以检查输入的信息是否正确并显示新的窗格,最后"取消",到cacel。在这里看起来如何:
现在,如果我点击任何按钮,对话框将关闭,我该如何更改?
我的代码到目前为止(大部分内容):
public MakeBookingForm()
{
components = new ArrayList<>();
this.title = "Make Booking";
setMessageType(JOptionPane.PLAIN_MESSAGE);
setRootPane(null);
setOptions(new String[] { "OK", "Next", "Cancel" });
setOptionSelection(0);
JPanel roomNumPanel = new JPanel();
lblRoomNum = new JLabel( "Enter the booking number" );
roomNumPanel.add(lblRoomNum);
txtFldRoomNum = new JTextField(20);
roomNumPanel.add(txtFldRoomNum);
this.addComponent(roomNumPanel);
}
public void show() //the function i use to show the form
{
int optionType = JOptionPane.OK_CANCEL_OPTION;
//JOptionPane.OK_OPTION
Object optionSelection = null;
if(options.length != 0)
{
optionSelection = options[optionIndex];
}
int selection = JOptionPane.showOptionDialog(rootPane,
components.toArray(), title, optionType, messageType, null,
options, optionSelection);
System.out.println(selection);
//return selection;
}
答案 0 :(得分:0)
JOptionPane
有一个关于按钮应该做什么的概念,你通过OK_CANCEL_OPTION
进行设置。所有选项都会导致弹出窗口关闭。从技术上讲,你可以动态获取组件列表,找到JOptionPane
创建的按钮,删除默认处理程序,然后添加自己的...但这似乎是一种复杂的方式(与不扩展相比) JOptionPane
)。
如果你开始使用JOptionPane,我建议你创建自己的JButton并将它们添加到你创建的JPanel中。这将允许您根据需要设置回调行为。然后告诉JOptionPane不显示任何按钮。这可以通过将构造函数的选项参数设置为:new Object[]{}
或调用:setOptions(new Object[]{})
;
由于没有显示默认按钮,JOptionPane
将自动pack()
本身,只留下您的窗格,而不会显示有不良行为的默认按钮。
答案 1 :(得分:0)
因为在显示对话框后,您需要检查int selection
以了解用户选择了哪一个?
我试图给你一些简单的例子:
private int selection;
private final String password = "12345";
public TestClass() throws MalformedURLException {
Object[] options = {"Enter", "Quit", "Cancel"};
URL url = new URL("http://education.oracle.com/education/images/wdpsub/java.png");
ImageIcon icon = new ImageIcon(url);
JPanel panel = new JPanel();
panel.add(new JLabel("Welcome to my\nJOptionPane example"));
selection = JOptionPane.showOptionDialog(null, panel, "Show me yout skills", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, icon, options, null);
System.out.println(selection);//print to test which button returns wich value
switch (selection) {
case 2:
JOptionPane.showMessageDialog(null, "Your job is cancelled");
break;
case 1:
String answer = JOptionPane.showInputDialog("Are you sure?");
if(answer.equalsIgnoreCase("YES")) {
System.exit(0);
}else {
JOptionPane.showOptionDialog(null, panel, "Show me yout skills", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, icon, options, null);
}
break;
case 0:
String keylog = JOptionPane.showInputDialog("Enter your password : ");
if(keylog.equals(password)) {
JOptionPane.showMessageDialog(null, "Hello user.");
}
break;
}
}
public static void main(String[] args) throws MalformedURLException {
new TestClass();
}
注意:编写此代码只是为了解释这项工作的逻辑。
我希望这能帮到你。