【问题标题】:A Question about JTextField in Java关于Java中JTextField的一个问题
【发布时间】:2011-05-24 18:31:00
【问题描述】:

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

提前致谢!

【问题讨论】:

标签: java string object-identity


【解决方案1】:

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

field.getText().isEmpty()

field.getText().trim().isEmpty()

【讨论】:

    【解决方案2】:

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

    field.getText().equals("")
    

    或者可能更好:

    field.getText().isEmpty()
    

    【讨论】:

      【解决方案3】:

      使用getText().equals("") 而不是==

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

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

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

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

          【讨论】:

          • 删除字符串两端的所有空格
          • 是的,在大多数情况下,您希望避免让用户提供一堆空白作为输入。例如,对于用户名,您可能希望使用字母数字字符而不是一堆空格。
          【解决方案6】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-11-26
            • 1970-01-01
            • 2020-02-10
            • 2011-11-26
            • 1970-01-01
            • 1970-01-01
            • 2010-10-11
            • 1970-01-01
            相关资源
            最近更新 更多