Java - 如何检查 JTextField 是否为空

34

我知道这是一个常见的问题并且已经找到了解决方案。但是当我尝试时它没有正常工作。

我的JTextField是空的,按钮也没有启用。当我在文本字段中写入内容时,按钮不会变为启用状态。

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

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

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

4
顺便说一下,我会使用 loginbt.setEnabled(name.getText().length()!=0); - johnchen902
@johnchen902 loginbt.setEnabled(name.getText().isEmpty()); - undefined
13个回答

39

为了实现这一点,你需要给你的JTextField添加一个更改监听器(一个响应文本更改的DocumentListener),并在actionPerformed()方法中根据JTextfield是否为空来更新loginButton的启用/禁用状态。

下面是我从这个线程中找到的内容。

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

  }
});

我想问一下,如果按钮依赖于多个文本字段,那么程序是否会改变?我是否可以使用相同的逻辑来定义操作,还是有其他更简洁的方法?感谢您的时间! - boxed__l
那么,您需要创建一个DocumentListener实现来处理该按钮,并将它们作为所有文本框的侦听器添加进去? - sanbhat
是的,谢谢。忘记了基本的东西:如何编写文档监听器 - boxed__l

22
以下代码将在JTextField name 不包含文本时返回true: name.getText().isEmpty();

4

检查JTextField是否为空的条件:

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

很好。我喜欢这个。 - Boris Karloff

4

3

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

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

必须使用javax.swing.event.ChangeListener编写并附加到字段上(请参见此处)。字段值的更改应触发监听器重新评估对象状态。您希望看到什么?


2
使用以下代码:
if(name.getText().equals(""))
{
loginbt.disable();
}

2

根据您的需求,您可以使用isEmpty()isBlank()方法。


仅当长度为0时,返回true。

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

如果字符串为空或仅包含空格代码点,则返回true,否则返回false。
this.name.getText().isBlank();

请注意,isBlank()方法适用于Java 11及以上版本。 - undefined

0
if(name.getText().hashCode() != 0){
    JOptionPane.showMessageDialog(null, "not empty");
}
else{
    JOptionPane.showMessageDialog(null, "empty");
}

你能否解释一下为什么你认为这是一个解决方案? - Trinimon

0

尝试这个并改变布尔语句的顺序。

String text = name.getText(); 
if(!text.isEmpty()) {
    loginbt.setEnabled(true);
}else {
    loginbt.setEnabled(false);
}

在我的操作方法中,它运行得很好。

public void actionPerformed(ActionEvent e){
    String inputText = e.getActionCommand();
    String itext = text1.getText();
    if(inputText.equals("Submit") && !itext.isEmpty()){
        label1.setText(text1.getText());
        text1.setText("");
    }
}

0

试试这个

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接