2012-01-20 45 views
0

我有兩個JTextFields的JPanel。如果用戶將一些文本寫入文本字段A,則相同的文本應該出現在文本字段B中,反之亦然。我需要兩個互相影響的JTextFields

這怎麼能實現沒有得到無限循環。

到目前爲止,我有以下這些leds到無限循環。

 JTextField textFieldA; 
     JTextField textFieldB; 

     textFieldA.getDocument().addDocumentListener(new DocumentListener() { 
      public void insertUpdate(DocumentEvent e) { 
       Document doc = (Document)e.getDocument(); 
       String line = doc.getText(0, doc.getLength()); 
       textFieldB.setText(line); 
      } 
      textFieldB.getDocument().addDocumentListener(new DocumentListener() { 
       public void insertUpdate(DocumentEvent e) { 
        Document doc = (Document)e.getDocument(); 
        String line = doc.getText(0, doc.getLength()); 
        textFieldA.setText(line); 
       } 
+1

你爲什麼不跨文本框共享同一個文檔實例? – kleopatra

+0

請你詳細說明一下:) – user836038

+0

呃..在什麼上?不能想到任何可能不清楚的地方:在這兩個領域使用相同的文件:-) – kleopatra

回答

2

您可以使用一個布爾值,當您更改傳播標記。

JTextField textFieldA; 
    JTextField textFieldB; 
    boolean updating = false; 

    textFieldA.getDocument().addDocumentListener(new DocumentListener() { 
     public void insertUpdate(DocumentEvent e) { 
      if(!updating) { 
      updating = true; 
      Document doc = (Document)e.getDocument(); 
      String line = doc.getText(0, doc.getLength()); 
      textFieldB.setText(line); 
      updating = false; 
      } 
     } 
    textFieldB.getDocument().addDocumentListener(new DocumentListener() { 
     public void insertUpdate(DocumentEvent e) { 
      if(!updating) { 
      updating = true; 
      Document doc = (Document)e.getDocument(); 
      String line = doc.getText(0, doc.getLength()); 
      textFieldA.setText(line); 
      updating = false; 
      } 
     } 
+0

就是這樣!很容易,但有時候你根本看不到它。謝謝@all – user836038

+0

不是最佳選擇:標記很脆弱,加上這種方法不能平滑(與文檔數量) – kleopatra

+0

@ user836038如果您希望視圖相同然後共享模型,請勿保留其中兩個。請參閱下面的答案。 – camickr

-1

我會用兩個文本字段上的關鍵偵聽器來實現,keyPressed事件然後將觸發字段複製到另一個。迎接

+0

錯誤的答案 - 你_不__如99.99 %)在Swing應用程序中使用keyListeners,在文本組件中使用更強的_never_(如99.9999999999%) – kleopatra

+0

@kleopatra我永遠不會再這樣做=)你能告訴我爲什麼嗎?我參與了一些擺動應用程序,並希望改善它們=) – CyrillC

+0

好計劃 - 尋找「擺動keylistener」應該拿出幾個解釋:-) – kleopatra

3

嘗試更新textFieldB只有textFieldAhasFocus(反之亦然)

7

MVC設計的利用和共享模型:

textFieldB.setDocument(textFieldA.getDocument()); 
+0

+1利用該模型。 – trashgod

+0

@trashgod,感謝您編輯代碼。有時手指不會鍵入大腦的想法:) – camickr