使用按钮上的自定义操作创建JOptionPane

时间:2017-05-26 20:02:32

标签: java swing joptionpane

我尝试使用来自用户的输入创建自定义对话框,在每个步骤(输入)之后验证信息,如果它正确,则会出现一个新面板,并且用户可以继续添加信息。要做到这一点,我使用JOptionPane。我将有三个按钮" Ok",仅当用户通过整个输入过程时启用," Next",以检查输入的信息是否正确并显示新的窗格,最后"取消",到cacel。在这里看起来如何:

enter image description here

现在,如果我点击任何按钮,对话框将关闭,我该如何更改?

我的代码到目前为止(大部分内容):

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

2 个答案:

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

注意:编写此代码只是为了解释这项工作的逻辑。

我希望这能帮到你。