【问题标题】:How to validate inputs on JTextField in Java如何在 Java 中验证 JTextField 上的输入
【发布时间】:2016-07-26 15:17:44
【问题描述】:

大家,我正在编写一个交互式图形用户界面程序。基本上它接受所有输入并在下面的 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

【问题讨论】:

  • 你能澄清你的问题吗?
  • 我们希望您直接在此处发布您的代码和图片,以便于浏览。
  • 此表格中的问题在这里无法回答,更多信息请阅读FAQ,尤其是关于MCVE的部分
  • 抱歉这里有任何混淆,我在这里发布了我的代码,但我不知道为什么你必须点击查看它。
  • 让我澄清一下我的问题:我想要的是,当名字字段为空或为空时,用户需要从文本字段而不是窗口再次重新输入,我不想要“JOPtionPane. showmessageDialog "窗口出来了。

标签: java swing jtextfield


【解决方案1】:

尝试使用焦点侦听器解决空输入问题 当您的组件失去焦点时,检查它的文本 i 文本是否为空,而不是通过 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);

【讨论】:

    【解决方案2】:

    试试这个方法,它可以防止用户在键入时输入非数字字符。 如果您正在输入数字,您可以从键盘捕获用户的输入:

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

    【讨论】:

    • 考虑使用自定义 DocumentFilterJFormattedTextField - KeyListener 不会处理粘贴操作和/或 dnd 之类的事情
    • 确实如此,但我添加了其他方法的参考
    • 也许我得把它加在那里。
    猜你喜欢
    • 2021-02-13
    • 2013-10-01
    • 1970-01-01
    • 2014-12-16
    • 2015-05-20
    • 2013-10-11
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多