2010-12-13 4 views
0

Я столкнулся с небольшой проблемой при запуске Java-класса, который я написал, хотя дизайн довольно прост. Я создал JPanel, и я добавил на него четыре JTextFields, и я добавил кнопку к этому JPanel. Затем я связал ActionListener с нажатой кнопкой. Код типа:Вопрос о JTextField в Java

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() == "" является допустимым способом тестирования без ввода?

Заранее благодарен!

+1

См. Http://stackoverflow.com/questions/971954/difference-between-equals-and –

ответ

3

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

field.getText().isEmpty() 

или

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

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

field.getText().equals("") 

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

field.getText().isEmpty() 
+0

Приветствия! Это очень помогло, и это сработало! – Kevin

1

Использование getText().equals("") вместо ==

+0

Привет, это сработало! – Kevin

1

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

+0

спасибо, полезно! – Kevin

1

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

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

или

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

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

+0

приветствия, что делает trim() здесь? – Kevin

+0

удаляет все пробелы на обоих концах строки – Kintaro

+0

Да, в большинстве случаев вы хотите, чтобы пользователь не предоставлял пустую часть пробелов в качестве входных данных.Например, для имен пользователей вы можете иметь буквенные числовые символы вместо пустых пробелов. – npinti

1

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

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