2016-07-26 30 views
0

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

我正在使用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 
+1

你能澄清你的问题 ? –

+0

我们希望您直接在这里发布您的代码和图像,以便轻松浏览。 –

+1

此表格中的问题在此处不予回答,有关更多信息以阅读常见问题解答,特别是有关MCVE – mKorbel

回答

0

尝试此方法,它可以防止进入非数字字符,因为它们键入用户。 你从键盘捕获用户的输入,这样如果你正在服用的数字:

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与其他方法为好。

+0

考虑使用自定义的[DocumentFilter](https://docs.oracle.com/javase/7/docs/api/javax/swing/text/DocumentFilter.html)或[JFormattedTextField](https://docs.oracle.com .com/javase/8/docs/api/javax/swing/JFormattedTextField.html) - KeyListener不会处理粘贴动作和/或dnd – copeg

+0

这是非常真实的,但我添加了其他方法的参考 –

+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);