2014-12-01 3 views
0

Я только что написал actionPerformed для моей кнопки сохранения, которая сохранит данные в arraylists, но перед этим я должен быть уверен, что все поля не пусты, поэтому, если текстовое поле пусто, я хочу показать DialogBox и поставить все пустое текстовое поле в красном фонеОператор java if не работает внутри if (item instanceof nomclass)

вот мой код

//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); 
       } 
      } 
     } 


    } 

так как я могу золь это проблема? Большое спасибо

+0

@kocko: Как на земле это дубликат? – Makoto

+0

Если бы вы могли предоставить немного больше тела вашему коду, вы могли бы получить некоторую помощь быстрее. Вы как бы оставляете нас догадываться и делать вывод о том, какие они есть. – Makoto

+0

'instanceof' не работает, если класс не является тем же, отлаживайте, какой класс предназначен для работы, но он не работает. – EpicPandaForce

ответ

0

Да Марун Марун прав, вы проверяете, является ли Строка нулевой (объект не exsit). Но вы хотите проверить, является ли строка пустой. Я думаю, что другой ответ решает, что вы проблема, но более чистое решение заключается в использовании метода, основанного на ошибке.

if(txtField.getText().isEmpty()) 
txtField.setBackground(Color.RED); 

Я бы добавил комментарий к другому ответу, но моя репутация не достаточно высока ...

2
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 
     } 
    } 
}); 

отметить также подпись метода, он возвращает String.

+0

Большое спасибо, если (txtField.getText(). IsEmpty()) txtField.setBackground (Color.RED); работает для меня, но я буду использовать ваше предложение (textField.getDocument(). addDocumentListener()), чтобы вернуть цвет по умолчанию при вводе некоторых слов внутри –

+0

Я настоятельно рекомендую вам использовать 'DocumentListener'. – Maroun

Смежные вопросы