2012-10-16 56 views
5

我有12個過濾器用於12列在JTable上。每個過濾器都是JTextField類型的TextField。每次用戶在文本框過濾器中輸入數據時,都會發生搜索。是否有可能在Swing中有多個文本字段的單個文檔監聽器

例如: 假設說,我有3列和3個文本框作爲過濾器。現在任何在我的表格過濾器中輸入的任何文本框都必須發生。它發生很好。

每個文本字段的
╔═════════════╦═════════════╦═════════════╗ 
║ [TextField] ║ [TextField] ║ [TextField] ║ 
╠═════════════╬═════════════╬═════════════╣ 
║    ║    ║    ║ 
╠═════════════╬═════════════╬═════════════╣ 
     ...   ...   ... 
╠═════════════╬═════════════╬═════════════╣ 
║    ║    ║    ║ 
╚═════════════╩═════════════╩═════════════╝ 

文本字段監聽器看起來像這樣,

textField.getDocument().addDocumentListener(new DocumentListener() { 
    public void changedUpdate(DocumentEvent e) { method(); } 
    public void removeUpdate(DocumentEvent e) { method(); } 
    public void insertUpdate(DocumentEvent e) { method(); } 
}; 

我的問題是,我重複此代碼對所有的12個文本字段,我是不是真的很開心。這是我們唯一的方式嗎?或者可以有人建議我一個更好的方法?

回答

8
  • 從匿名類切換到內部類,並將相同的偵聽器附加到每個字段。來源包含在事件
  • 使其成爲一個單獨的類,並繼續爲每個字段使用單獨的偵聽器。避免至少代碼重複

參見this tutorial用於內類

+0

1 ..輝煌的一例..工作就像一個魅力。現在不需要冗餘代碼..非常感謝.. :) – Amarnath

+2

您仍然可以使用匿名類來執行此操作:'DocumentListener listener = new DocumentListener(){...}; for(JTextField textfield:fields){textField.getDocument()。addDocumentListener(listener); }' –

+0

@WalterLaan的權利,我忘了那個選項 – Robin

相關問題