输入对话框[需要的信息]

时间:2013-10-16 22:10:47

标签: java string swing input output

所以我有一个程序在单击按钮时启动输入对话框。我需要帮助的是,一旦我从输入对话框中收集信息并且它们消失了,我按下Enter键并重新出现输入对话框。为什么呢?

此外,如何将输入对话框保留为空,它会显示为错误,然后重复直到它不为空?


public static String fn;
public static String sn;

public void actionPerformed (ActionEvent e){
    fn = JOptionPane.showInputDialog("What is your first name?");
    sn = JOptionPane.showInputDialog("What is your second name");

    //JOptionPane.showMessageDialog(null, "Welcome " + fn + " " + sn + ".", "", JOptionPane.INFORMATION_MESSAGE);
    text.setText("Welcome " + fn + " " + sn + ".");
    b.setVisible(false);
    text.setVisible(true);
    text.setBounds(140,0,220,20);
    text.setHorizontalAlignment(JLabel.CENTER);
    text.setEditable(false);
    text.setBackground(Color.YELLOW);
    writeToFile();
}

public BingoHelper(){
    super("BINGO");
    add(text);
    text.setVisible(false);
    add(b);
    this.add(pnlButton);
    pnlButton.setBackground(Color.BLUE);
    //pnlButton.add(b);+
    b.setVisible(true);
    b.setBounds(145,145,145,20);
    //b.setPreferredSize(new Dimension(150,40));
    b.addActionListener(this);
    b.setBackground(Color.GREEN);
    rootPane.setDefaultButton(b);
}

1 个答案:

答案 0 :(得分:2)

当您致电rootPane.setDefaultButton时,您正在指定由Enter键激活的按钮。

要在输入不可接受时阻止JOptionPane关闭,请创建一个实际的JOptionPane实例,然后创建自己的按钮并将其指定为选项。按钮的Action或ActionListener必须调用JOptionPane的setValue方法:

final JOptionPane optionPane = new JOptionPane("What is your first name?",
    JOptionPane.QUESTION_MESSAGE);
optionPane.setWantsInput(true);

Action accept = new AbstractAction("OK") {
    private static final long serialVersionUID = 1;
    public void actionPerformed(ActionEvent event) {
        Object value = optionPane.getInputValue();
        if (value != null && !value.toString().isEmpty()) {
            // This dismisses the JOptionPane dialog.
            optionPane.setValue(JOptionPane.OK_OPTION);
        }
    }
};

Object acceptButton = new JButton(accept);
optionPane.setOptions(new Object[] { acceptButton, "Cancel" });
optionPane.setInitialValue(acceptButton);

// Waits until dialog is dismissed.
optionPane.createDialog(null, "First Name").setVisible(true);

if (!Integer.valueOf(JOptionPane.OK_OPTION).equals(optionPane.getValue())) {
    // User canceled dialog.
    return;
}

String fn = optionPane.getInputValue().toString();