2014-05-25 3 views

답변

1

당신은 모델 객체를 사용하고 변경을들을 수 있습니다. 하나 DocumentButtonEnablement 모든 Document들에 대해 살펴과 ButtonModel있게 변경 될 때마다

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

} 

.

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

ButtonModel 대신에 JButtonDocumentJTextField 사용의 장점은 업데이트됩니다 있기 때문에, 당신은 쉽게 구체적인 구현을 변경하고 당신이 당신의 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. 필드에 문자가없는 경우 단추를 비활성화하십시오. 그렇지 않으면 사용하도록 설정하십시오. 스윙 MVC 기반으로하므로
+0

우리는 한 번에 여러 필드에 이것을 사용할 수 있습니까 ??? –

관련 문제