2012-10-16 27 views
5

Mam 12 filtrów dla 12 kolumn na JTable. Każdy filtr to TextField typu JTextField. Za każdym razem, gdy użytkownik wprowadza dane w filtrze pola tekstowego, następuje wyszukiwanie.Czy możliwe jest posiadanie jednego detektora dokumentów do wielu pól tekstowych w Swing?

Przykład: Załóżmy, że mam 3 kolumny i 3 pola tekstowe nad nimi jako filtry. Teraz coś, co jest wpisane w dowolnym polu tekstowym, moje filtrowanie tabeli musi się wydarzyć. To się dzieje świetnie.

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

Tekst słuchacz pola dla każdego pola tekstowego wygląda tak,

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

Moje pytanie brzmi, jestem powtarzając ten kod dla wszystkich 12 pól tekstowych, które nie byłem zadowolony. Czy to jedyny sposób, jaki mamy? czy ktoś może zaproponować mi lepszy sposób?

Odpowiedz

8
  • Przejście z anonimowej klasy na wewnętrzną klasę i dołączenie tego samego detektora do każdego pola. Źródło jest zawarte w zdarzeniu
  • Stwórz oddzielną klasę i używaj oddzielnych detektorów dla każdego pola. Unika przynajmniej powielania KOD

Patrz this tutorial na przykład wewnętrznej klasy

+0

+1 .. brylantowy .. działało jak czar. Brak redundancji kodu teraz .. Wielkie dzięki .. :) – Amarnath

+2

Nadal możesz zrobić to z anonimową klasą: 'DocumentListener listener = new DocumentListener() {...}; for (JTextField textfield: fields) {textField.getDocument(). addDocumentListener (listener); } ' –

+0

@WalterLaan w prawo, Zapomniałem tej opcji – Robin

Powiązane problemy