0

我在运行我编写的 Java 类时遇到了一个小问题,尽管设计非常简单。我创建了一个 JPanel,并在其上添加了四个 JTextField,并且我还为这个 JPanel 附加了一个按钮。然后,我将一个 ActionListener 关联到这个被按下的按钮。代码如下:

okButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) 
    {
       if (imageIdField.getText() == "" && 
           captionField.getText() == "" &&
           creditField.getText() == "" &&
           titleField.getText()== "") 
           {
              mediaXML = "";                        
              results.clear();
              results.put("error1", "more");

           } 
           else
           { ....
           }
    }

奇怪的是,当我按下 OK 按钮后,我确实在这四个 JTextField 中输入了文本,它仍然会落在 IF 分支中,就好像我没有在这四个字段中的任何一个中输入任何文本一样。我已经调试了一段时间,但没有任何线索。谁能给我一些提示,例如 .getText() == "" 是否是测试无输入的有效方法?

提前致谢!

4

6 回答 6

3

如前所述,使用==是不正确的。为了可读性,请尝试:

field.getText().isEmpty()

或者

field.getText().trim().isEmpty()
于 2010-12-13T16:19:58.300 回答
1

==仅检查左侧和右侧是否引用了完全相同的对象实例。并且由于""转换为类似 的new String("")内容,因此如果将其与已经存在的字符串进行比较,它将始终返回 false。

如果要比较一个类的两个实例是否具有相同的状态,则需要使用equals(). 在你的情况下*.getText().equals("")。更优雅的方法是使用isEmpty()String 类的方法。

于 2010-12-13T16:24:05.890 回答
1

你应该使用.equals。此外,您可能想做这样的事情:

imageField.getText().trim().length() == 0  //The same for the others

或者

imageField.getText().trim().isEmpty() //The same for the others

如果您想确保用户实际上已经写了一些字符而不仅仅是空格。

于 2010-12-13T16:19:46.237 回答
1

==通常在Strings 或大多数其他东西上使用是个坏主意。它检查对象是否完全相同,而不是它们具有相同的值。"" != new String("").

field.getText().equals("")

或者可能更好:

field.getText().isEmpty()
于 2010-12-13T16:15:54.833 回答
1

使用getText().equals("")代替==

于 2010-12-13T16:16:25.390 回答
1

使用 == 检查是否是内存中的同一个对象,使用 .equals("YOUR STRING") 检查对象的内容是否相同。

于 2010-12-13T16:18:08.313 回答