【问题标题】:Java - Check if JTextField is empty or notJava - 检查 JTextField 是否为空
【发布时间】:2013-06-12 12:25:13
【问题描述】:

所以我知道这是一个受欢迎的问题,并且已经找到了解决方案。但是当我尝试这个时它不能正常工作。

我的 JTextField 为空且按钮未启用。当我在我的文本字段中写一些东西时,按钮没有被启用。

所以我的程序应该每秒检查这个字段是否为空。只要有人在文本字段中写入内容,就应该启用该按钮。^^

loginbt = new JButton("Login");
    loginbt.addActionListener(new loginHandler());
    add(loginbt);

    if(name.getText().equals("")) {
        loginbt.setEnabled(false);
    }else {
        loginbt.setEnabled(true);
    }

【问题讨论】:

  • 顺便说一句,我会用loginbt.setEnabled(name.getText().length()!=0);

标签: java swing jbutton jtextfield documentlistener


【解决方案1】:

为此,您需要为您的JTextField 添加更改侦听器(一个DocumentListener,它对文本中的更改做出反应),在actionPerformed() 内,您需要将loginButton 更新为启用/禁用,具体取决于JTextfield 是否为空。

以下是我从这个thread 中找到的。

yourJTextField.getDocument().addDocumentListener(new DocumentListener() {
  public void changedUpdate(DocumentEvent e) {
    changed();
  }
  public void removeUpdate(DocumentEvent e) {
    changed();
  }
  public void insertUpdate(DocumentEvent e) {
    changed();
  }

  public void changed() {
     if (yourJTextField.getText().equals("")){
       loginButton.setEnabled(false);
     }
     else {
       loginButton.setEnabled(true);
    }

  }
});

【讨论】:

  • 我想问一下如果按钮依赖于多个文本字段,程序是否会改变。我会使用相同的逻辑来定义操作,还是有其他方法可以使用更少的代码?感谢您的宝贵时间!
  • 然后创建一个DocumentListener 实现来处理该按钮并将它们作为侦听器添加到所有文本框?
  • 是的..谢谢..忘记了基本的东西:how to write document listener
【解决方案2】:

如果 JTextField“名称”不包含文本,则以下将返回 true:

name.getText().isEmpty

【讨论】:

    【解决方案3】:

    你需要的是一个叫做 Document Listener 的东西。见How to Write a Document Listener

    【讨论】:

      【解决方案4】:

      检查 JTextFiled 是否为空条件:

      if( (billnotf.getText().length()==0)||(billtabtf.getText().length()==0))
      

      【讨论】:

      • 不错。我喜欢这个。
      【解决方案5】:

      好吧,渲染按钮启用/禁用的代码:

      if(name.getText().equals("")) {
          loginbt.setEnabled(false);
      }else {
          loginbt.setEnabled(true);
      }
      

      必须以javax.swing.event.ChangeListener 书写并附加到字段中(请参阅here)。字段值的更改应触发侦听器重新评估对象状态。你期待什么?

      【讨论】:

        【解决方案6】:

        使用以下代码:

        if(name.getText().equals(""))
        {
        loginbt.disable();
        }
        

        【讨论】:

          【解决方案7】:

          您可以根据需要使用isEmpty()isBlank() 方法。


          当且仅当 length() 为 0 时返回 true。

          this.name.getText().isEmpty();
          

          如果字符串为空或仅包含空白代码点,则返回 true,否则返回 false

          this.name.getText().isBlank();
          

          【讨论】:

            【解决方案8】:

            试试这个

            if(name.getText() != null && name.getText().equals(""))
            {
                    loginbt.setEnabled(false);
            }
            else
            {
                    loginbt.setEnabled(true);
            }
            

            【讨论】:

              【解决方案9】:
              if(name.getText().hashCode() != 0){
                  JOptionPane.showMessageDialog(null, "not empty");
              }
              else{
                  JOptionPane.showMessageDialog(null, "empty");
              }
              

              【讨论】:

              • 冷,请解释一下为什么您认为这是一个解决方案?
              【解决方案10】:
              private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         
                  // Submit Button        
              
                  String Fname = jTextField1.getText();
                  String Lname = jTextField2.getText();
                  String Desig = jTextField3.getText();
                  String Nic = jTextField4.getText();
                  String Phone = jTextField5.getText();
                  String Add = jTextArea1.getText();
                  String Dob = jTextField6.getText();
                  // String Gender;
                  // Image
              
                  if (Fname.hashCode() == 0 || Lname.hashCode() == 0 || Desig.hashCode() == 0 || Nic.hashCode() == 0 || Phone.hashCode() == 0 || Add.hashCode() == 0)
                  {
                      JOptionPane.showMessageDialog(null, "Some fields are empty!");
                  }
                  else
                  {
                      JOptionPane.showMessageDialog(null, "OK");
                  }
              }
              

              【讨论】:

              • 嗨@HarinduLakshan,请考虑添加更多信息以提高答案的质量。
              【解决方案11】:

              在您的文本字段中尝试使用 keyListener

              jTextField.addKeyListener(new KeyListener() {
              
                      @Override
                      public void keyTyped(KeyEvent e) {
                      }
              
                      @Override
                      public void keyPressed(KeyEvent e) {
                          if (text.getText().length() >= 1) {
                              button.setEnabled(true);
                          } else {
                              button.setEnabled(false);
                          }
                      }
              
                      @Override
                      public void keyReleased(KeyEvent e) {
                      }
              
                  });
              

              【讨论】:

              • -1 DocumentListener 是首选方法。很少有理由使用 KeyListener。这是使用 AWT 时的旧设计。此外,代码无论如何都不会工作,因为在生成 keyPressed 事件时没有向 Document 添加任何文本,所以当第一个事件被触发时长度仍然为 0。
              • 感谢指正,以后会看到DocumentListener
              猜你喜欢
              • 2017-07-17
              • 2016-07-16
              • 2015-06-21
              • 2017-04-17
              • 2011-10-17
              • 1970-01-01
              • 2021-10-17
              • 1970-01-01
              相关资源
              最近更新 更多