如何在Java

时间:2016-07-26 15:17:44

标签: java swing jtextfield

大家,我正在编写一个交互式图形用户界面程序。基本上它接受所有输入并在下面的TextArea上显示信息。但如果所有输入为空或空,它将验证所有输入。 我的问题是,例如,名字是空的,它怎么能循环回textField(名字字段)?然后重新打字而不再继续?

我正在使用do while循环,但它仅在我使用JOptionPane窗口弹出时才有效。让我澄清一下我的问题:我想要的是当名字字段为空或空时,用户需要再次从文本字段而不是窗口重新输入,我不希望“JOPtionPane.showmessageDialog”窗口出来 感谢

图像在这里

graphic interface

do while loop

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

2 个答案:

答案 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以及其他方法。