2013-10-04 57 views
4

我有一個文本框,當用戶插入字符一定數量的程序應該把它放在一個JTable並清除文本框,但它觸發了Jtextfield.setText("");不能使用的DocumentListener

事件這是我清楚的JTextField代碼:

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

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

     @Override 
     public void removeUpdate(DocumentEvent e) { 

     } 

     @Override 
     public void changedUpdate(DocumentEvent e) { 

     } 

     private void printIt() { 
      //DocumentEvent.EventType type = documentEvent.getType(); 
      String code=jTextField2.getText().trim(); 

      // if(type.toString().trim().length()==13) 
      if (code.length()==4) { 
        list.add(code); 
        mod.addRow(new Object[]{code}); 
        jTextField2.setText(""); 
      } 
     } 
    }); 
} 

回答

6

所有的報價,以便在使用的DocumentListener更新文本字段你需要用的代碼在SwingUtilities.invokeLater(),所以執行代碼在完成對文檔的所有更新之後。

SwingUtilities.invokeLater(new Runnable() 
{ 
    public void run() 
    { 
     jTextField2.setText(""); 
    } 
}); 
+0

Omg非常感謝你!,你搖滾它工作:) – Arshtat

4

您無法修改DocumentListener中的文本字段的雙重結構。使用DocumentFilter修改文字。

文檔監聽器不應該修改文檔的內容;在聽者收到 更改通知之前, 更改已完成。相反,編寫一個覆蓋 insertString或刪除方法的自定義文檔,或者兩者兼而有之。

另一部分。

您可能想要更改文檔偵聽器中文檔的文本。 但是,您絕不應該在文檔偵聽器中修改文本組件的內容 。如果你這樣做,該程序可能會出現 死鎖。 相反,您可以使用格式化文本字段或提供 文檔過濾器

+0

那麼我該怎麼做呢? – Arshtat

+0

我會更新鏈接,你可以使用documentFilter :) – nachokk

+0

是的先生,但我仍然需要使用文件監聽器,我正在做這個程序的條形碼掃描器,所以在每次閱讀後,它應該清除文本字段。 – Arshtat