2012-10-16 23 views
5

Ho 12 filtri per 12 colonne su una tabella J. Ogni filtro è un campo di testo di tipo JTextField. Ogni volta che un utente inserisce i dati nel filtro della casella di testo, la ricerca avviene.È possibile avere un singolo listener di documenti su più campi di testo in Swing

Esempio: Supponiamo di avere 3 colonne e 3 caselle di testo sopra di esse come filtri. Ora qualsiasi cosa che è stata digitata in una qualsiasi delle caselle di testo deve avere il filtro della tabella. Sta succedendo alla grande.

╔═════════════╦═════════════╦═════════════╗ 
║ [TextField] ║ [TextField] ║ [TextField] ║ 
╠═════════════╬═════════════╬═════════════╣ 
║    ║    ║    ║ 
╠═════════════╬═════════════╬═════════════╣ 
     ...   ...   ... 
╠═════════════╬═════════════╬═════════════╣ 
║    ║    ║    ║ 
╚═════════════╩═════════════╩═════════════╝ 

Testo campo listener per ciascuna del campo di testo si presenta così,

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

La mia domanda è, ripeto questo codice per tutti i campi di 12 testo, che non ero davvero felice. È questo l'unico modo che abbiamo? o qualcuno mi può suggerire un modo migliore?

risposta

8
  • Passa da una classe anonima ad una classe interna e allegare lo stesso ascoltatore ad ogni campo. La fonte è contenuta nell'evento
  • Crea una classe separata e continua a utilizzare listener separati per ogni campo. Evita almeno il codice di duplicazione

Vedere this tutorial per un esempio di una classe interna

+0

+1 .. brillante .. funzionato come un fascino. Nessuna ridondanza del codice ora .. Grazie mille .. :) – Amarnath

+2

Puoi ancora farlo con una classe anonima: 'DocumentListener listener = new DocumentListener() {...}; for (campo di testo JTextField: fields) {textField.getDocument(). addDocumentListener (listener); } ' –

+0

@WalterLaan a destra, ho dimenticato l'opzione – Robin