我正在使用do while循环,但它仅在我使用JOptionPane窗口弹出时才有效。让我澄清一下我的问题:我想要的是当名字字段为空或空时,用户需要再次从文本字段而不是窗口重新输入,我不希望“JOPtionPane.showmessageDialog”窗口出来 感谢
图像在这里
do{
whetherContinue=true;
FName=TxtFname.getText();
if(TxtFname.getText().isEmpty()){
FName = JOptionPane.showInputDialog("Please type your First Name");
TxtFname.setText(FName);
}
else{
}
if (FName==null)
System.exit(1);
try{
if (FName.isEmpty())
throw new ArithmeticException("First name can not be empty!");
whetherContinue = false;
}catch (Exception ex)
{
JOptionPane.showMessageDialog(null,"The first name can not be empty! Please type again");
}
}while(whetherContinue); //First Name while
答案 0 :(得分:0)
尝试使用焦点列表器来解决空输入问题 当你的组件丢失焦点时检查它的文本我文本是空的,而不是通过requestFocus方法返回到同一个组件
FocusListener focus_event = new FocusListener() {
@Override
public void focusLost(FocusEvent arg0) {
if(textField.getText().isEmpty())
{
JOptionPane.showConfirmDialog(null, "Please enter","erruer",JOptionPane.ERROR_MESSAGE);
textField.requestFocus();
}
}
@Override
public void focusGained(FocusEvent arg0) {
// TODO Auto-generated method stub
}
};
textField.addFocusListener(focus_event);
答案 1 :(得分:-1)
尝试此方法,可防止用户在键入时输入非数字字符。 您可以从键盘捕获用户的输入,如果您正在使用数字:
JTextField textField = new JTextField(10);
textField.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e) {
char c = e.getKeyChar();
if ( ((c < '0') || (c > '9')) && (c != KeyEvent.VK_BACK_SPACE)) {
e.consume(); // ignore event
}
}
});
基于这种方法,你可以为你想要的角色做。
或者用JFormattedTextField更改你的JTextField,如下所示:
try {
MaskFormatter mascara = new MaskFormatter("##.##");
JFormattedTextField textField = new JFormattedTextField(mascara);
textField.setValue(new Float("12.34"));
} catch (Exception e) {
...
}
以下是reference以及其他方法。