Вопрос о JTextField в Java - PullRequest
       17

Вопрос о JTextField в Java

0 голосов
/ 13 декабря 2010

Я столкнулся с небольшой проблемой при запуске написанного мной 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
           { ....
           }
    }

Странно, что после того, как я нажал кнопку ОК, и я сделал ввод текста в эти четыре поля JTextFields, он все равно попадет в ветку IF, как будто я неВведите любой текст в любом из этих четырех полей.Я отлаживал это некоторое время, но понятия не имею.Может ли кто-нибудь дать мне подсказку, например, является ли .getText () == "" допустимым способом тестирования без ввода?

Заранее спасибо!

Ответы [ 6 ]

3 голосов
/ 13 декабря 2010

Как уже упоминалось, использование == не правильно. Для удобства чтения попробуйте:

field.getText().isEmpty()

или

field.getText().trim().isEmpty()
1 голос
/ 13 декабря 2010

== только проверяет, относятся ли левая и правая стороны к точно такому же экземпляру объекта.А поскольку "" переводится в нечто вроде new String(""), оно всегда будет возвращать false, если вы сравните его со строкой, которая уже существует.

Если вы хотите сравнить, имеют ли два экземпляра класса одинаковыеукажите, что вам нужно использовать equals().В вашем случае *.getText().equals("").Более элегантный метод будет использовать метод isEmpty() класса String.

1 голос
/ 13 декабря 2010

Вы должны использовать .equals .Кроме того, вы можете захотеть сделать что-то вроде этого:

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

или

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

, если вы хотите убедиться, что пользователь на самом деле написал некоторые символы вместо просто пробелов.

1 голос
/ 13 декабря 2010

Используйте ==, чтобы проверить, является ли это тот же объект в памяти, и .equals ("ВАША СТРОКА"), чтобы проверить, является ли содержимое объекта одинаковым.

1 голос
/ 13 декабря 2010

Используйте getText().equals("") вместо ==

1 голос
/ 13 декабря 2010

Обычно плохая идея использовать == на String с или большинство других вещей.Он проверяет, что объекты являются точно таким же экземпляром, а не то, что они имеют одинаковое значение."" != new String("").

field.getText().equals("")

Или, возможно, лучше:

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