关于Java中JTextField的一个问题

关于Java中JTextField的一个问题,java,string,object-identity,Java,String,Object Identity,我在运行我编写的Java类时遇到了一个小问题,尽管设计非常简单。我已经创建了一个JPanel,并且在它上面添加了四个JTextFields,并且在这个JPanel上附加了一个按钮。然后,我将ActionListener与按下的按钮关联。代码如下: okButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (imageIdFiel

我在运行我编写的Java类时遇到了一个小问题,尽管设计非常简单。我已经创建了一个JPanel,并且在它上面添加了四个JTextFields,并且在这个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按钮之后,我确实在这四个JTextFields中输入了文本,但它仍然会落在IF分支中,就好像我没有在这四个字段中输入任何文本一样。 我调试这个已经有一段时间了,但没有任何线索。有谁能给我一些提示,比如.getText()==“”是否是测试无输入的有效方法


提前谢谢

通常在
字符串
或大多数其他东西上使用
==
是个坏主意。它检查对象是否是完全相同的实例,而不是它们是否具有相同的值<代码>“”!=新字符串(“”)

或者更好:

field.getText().isEmpty()

使用
getText().equals(“”)代替
=

使用==检查内存中的对象是否相同,.equals(“您的字符串”)检查对象的内容是否相同。

您应该使用。此外,您可能希望执行以下操作:

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


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

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

field.getText().isEmpty()


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


如果要比较一个类的两个实例是否具有相同的状态,则需要使用
equals()
。在您的例子中,
*.getText()等于(“”
)。更优雅的方法是使用String类的
isEmpty()
方法。

请参阅:它删除String两端的所有空白。是的,在大多数情况下,您希望避免让用户提供一堆空白作为输入。例如,对于用户名,您可能希望使用字母数字字符,而不是一堆空格。
imageField.getText().trim().isEmpty() //The same for the others
field.getText().isEmpty()
field.getText().trim().isEmpty()