有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

swing如何在Java中验证JTextField上的输入

各位,我正在编写一个交互式图形用户界面程序。基本上,它接受所有输入并在下面的文本区域显示信息。但如果输入为空或null,它将验证所有输入。 我的问题是,例如,first name是空的,它如何在textField(first name field)处循环?然后重新键入而不继续

我使用了do while循环,但它只在使用JOptionPane窗口弹出时起作用。让我澄清我的问题:我想要的是,当名字字段为null或为空时,用户需要从textfield而不是窗口重新键入,我不希望出现“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) 个答案

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

  2. # 2 楼答案

    请尝试使用focus listner解决空输入问题 当焦点从组件中丢失时,检查它的文本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);