所以我有一个程序在单击按钮时启动输入对话框。我需要帮助的是,一旦我从输入对话框中收集信息并且它们消失了,我按下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);
}
答案 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();