2014-05-25 41 views

回答

1

由於擺動基於MVC,因此您可以使用模型對象並聆聽變化。

public class Main { 

    public static void main(String[] args) { 
     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 

     Container contentPane = frame.getContentPane(); 
     contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.PAGE_AXIS)); 

     JTextField textField1 = new JTextField(30); 
     JTextField textField2 = new JTextField(30); 
     JTextField textField3 = new JTextField(30); 
     JButton jButton = new JButton("Button"); 

     ButtonModel model = jButton.getModel(); 
     Document document1 = textField1.getDocument(); 
     Document document2 = textField2.getDocument(); 
     Document document3 = textField3.getDocument(); 

     ButtonEnablement buttonEnablement = new ButtonEnablement(model); 
     buttonEnablement.addDocument(document1); 
     buttonEnablement.addDocument(document2); 
     buttonEnablement.addDocument(document3); 

     contentPane.add(textField1); 
     contentPane.add(textField2); 
     contentPane.add(textField3); 
     contentPane.add(jButton); 

     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

} 

每當一個Document改變ButtonEnablement會看看所有Document S和啓用ButtonModel

public class ButtonEnablement implements DocumentListener { 

     private ButtonModel buttonModel; 
     private List<Document> documents = new ArrayList<Document>(); 

     public ButtonEnablement(ButtonModel buttonModel) { 
      this.buttonModel = buttonModel; 
     } 

     public void addDocument(Document document) { 
      document.addDocumentListener(this); 
      this.documents.add(document); 
      documentChanged(); 
     } 

     public void documentChanged() { 
      boolean buttonEnabled = false; 
      for (Document document : documents) { 
       if (document.getLength() > 0) { 
        buttonEnabled = true; 
        break; 
       } 
      } 
      buttonModel.setEnabled(buttonEnabled); 
     } 

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

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

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

使用ButtonModelDocument代替JButtonJTextField的好處是,你可以很容易地改變具體實現,你不必擔心你的UI組件是如何被更新的,因爲他們得到更新當他們的模型改變時自動。

0

您可以設置事件偵聽器來查看文本字段何時更改。然後,禁用按鈕,如果一個字段爲空:

field1.addKeyListener(new KeyAdapter() { 
     public void keyReleased(KeyEvent e) { //watch for key strokes 
      if(field1.getText().length() == 0 || field2.getText().length() == 0) 
       button.setEnabled(false); 
      else 
      { 
       Button.setEnabled(true); 
      } 
     } 
}); 

的此策略是:

  1. 手錶上的字段的任何擊鍵。您需要複製字段2的此事件偵聽器(以及您可能具有的任何其他字段)。
  2. 默認您的按鈕爲禁用,因爲這些字段爲空
  3. 如果字段的字符爲零,請禁用該按鈕。否則,啓用它。
+0

我們不能一次使用多個字段嗎? –