2013-10-16 66 views
0

所以我有一个程序,当我点击一个按钮时启动一个输入对话框。我需要帮助的是,一旦我从输入对话框收集信息并且它们消失后,我按下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

无关:不做组件的任何手动尺寸/定位,永远 - 这就是布局管理的全部责任。 – kleopatra

+0

当你收集输入,并且输入对话消失时,按钮获得焦点? – Cold

回答

2

当你调用rootPane.setDefaultButton你所指定的是回车键启动按钮。

要防止在输入不可接受时关闭JOptionPane,请创建一个实际的JOptionPane实例,然后创建您自己的按钮并将其指定为选项。按钮的动作或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();