2014-04-07 64 views
1

嗨,我非常需要一些幫助我已經搜索Jtextfield以在jbutton啓用之前填充,大多數人使用DocumentListener來確定Jtextfield是否正在填充。我試過DocumentListener,它的工作原理,但我想要的是所有的Jtextfield必須不是空的,在Jbutton啓用之前,這裏是我的代碼。在Jbutton啓用之前填充多個Jtextfields

 Ftext.getDocument().addDocumentListener(new DocumentListener() { 

     @Override 
     public void insertUpdate(DocumentEvent e) { 
      change(); 
     } 

     @Override 
     public void removeUpdate(DocumentEvent e) { 
      change(); 
     } 

     @Override 
     public void changedUpdate(DocumentEvent e) { 
      change(); 
     } 

     private void change(){ 

      if (Ftext.getText().equals("") && Mtext.getText().equals("") && Ltext.getText().equals("") && Addtext.getText().equals("")) { 
       SaveButton.setEnabled(false); 
      } else { 
       SaveButton.setEnabled(true); 
      } 
      } 
    }); 

回答

2

if (Ftext.getText().equals("") && Mtext.getText().equals("") && Ltext.getText().equals("") && Addtext.getText().equals(""))

意味着所有的字段必須是空的。你需要閱讀這個邏輯大聲有些時候...

「如果字段爲空,現場是空的,字段爲空......」

如果您使用||(或)來代替,這將意味着,如果字段的任何一個是空的聲明將是true例如...

if (Ftext.getText().equals("") || 
    Mtext.getText().equals("") || 
    Ltext.getText().equals("") || 
    Addtext.getText().equals("")) {... 

你也應該考慮使用.getText().isEmpty().getText().trim().isEmpty()如果字段不應只包含空格。

你也可以考慮寫一個DocumentListener實現,而不是爲每個字段

public class FieldValidationHandler implements DocumentListener() { 

    private List<JTextField> monitorFields; 

    public FieldValidationHandler(JTextField... fields) { 
     monitorFields = Arrays.asList(fields); 
     for (JTextField field : monitorFields) { 
      field.getDocument().addDocumentListener(this); 
     } 
    } 

    @Override 
    public void insertUpdate(DocumentEvent e) { 
     change(); 
    } 

    @Override 
    public void removeUpdate(DocumentEvent e) { 
     change(); 
    } 

    @Override 
    public void changedUpdate(DocumentEvent e) { 
     change(); 
    } 

    private void change(){ 

     boolean enabled = true; 
     for (JTextField field : monitorFields) { 
      if (field.getText().trim().isEmpty()) { 
       enabled = false; 
       break; 
      } 
     } 
     SaveButton.setEnabled(enabled); 
    } 
} 

然後你只需要創建一個實例創建一個新的匿名類...

FieldValidationHandler handler = new FieldValidationHandler(Ftext, Mtext, Ltext, Addtext); 

現在,這種方法有點偷偷摸摸,因爲它會將DocumentListener添加到您通過構造函數自動指定的字段中。

另一種方法可能是擁有某種「驗證」控制器,您將傳遞給此處理程序,並在調用change時調用某種「驗證」方法。

這會將聽衆與字段分隔開來,但這在當時是上下文的問題。

我個人有一個「登錄」和「註銷」的過程,這將允許您添加或刪除字段,因爲你需要

+0

感謝的快速響應,先生,我仍然在Java中的新手要去嘗試這個。 – Monkeymouse