Java-оператор if не работает внутри if(item instanceof nomclass)
Я только что написал actionPerformed для моей кнопки сохранения, которая будет сохранять данные в массивах списков, но перед этим я должен быть уверен, что все поля не пусты, поэтому, если текстовое поле пусто, я хочу показать диалоговое окно и поместить все пустое текстовое поле в красный цвет. фоновый цвет
вот мой код
//Field outside constructor
private List<Component> comp;
//inside constructor
comp = getAllComponents(this);
//method
public static List<Component> getAllComponents(final Container c) {
Component[] comps = c.getComponents();
List<Component> compList = new ArrayList<Component>();
for (Component comp : comps) {
compList.add(comp);
if (comp instanceof Container)
compList.addAll(getAllComponents((Container) comp));
}
return compList;
}
``
//actionperformed
if(e.getSource() == savebtn){
for(Component item:comp){
if(item.isVisible()){
if(item instanceof JTextField){
JTextField txtField = (JTextField)item;
//here is my problem: with no if statement my program works fine and puts all textfields in red but I want to highlight just empty textfields;
if(txtField.getText() == null)
txtField.setBackground(Color.RED);
}
}
}
}
так как я могу решить эту проблему? большое спасибо вам
2 ответа
Да, Марун Марун прав, вы проверяете, является ли строка пустой (объект не существует). Но вы хотите проверить, пуста ли строка. Я думаю, что другой ответ решает вашу проблему, но более чистое решение заключается в использовании метода isempty.
if(txtField.getText().isEmpty())
txtField.setBackground(Color.RED);
Я бы добавил комментарий к другому ответу, но моя репутация недостаточно высока...
if(txtField.getText() == null)
Здесь вы не проверяете, если он пуст, смотрите документацию public String getText()
1:
Возвращает текст, содержащийся в этом TextComponent. Если базовый документ имеет значение null, выдаст исключение NullPointerException. Обратите внимание, что текст не является связанным свойством, поэтому при его изменении не запускается PropertyChangeEvent. Чтобы прослушать изменения в тексте, используйте DocumentListener.
Я бы использовал DocumentListener
вместо этого что-то вроде этого:
myTextField.getDocument().addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent e) { checkIfEmpty(); }
public void removeUpdate(DocumentEvent e) { checkIfEmpty(); }
public void insertUpdate(DocumentEvent e) { checkIfEmpty();}
public void checkIfEmpty() {
if (myTextField.getText().equals("")){
//set color to red
} else {
//set color back
}
}
});
1 Также обратите внимание на сигнатуру метода, он возвращает String
,