Swing

2012-10-16 21 views
5

'da birden çok metin alanına tek bir belge dinleyicisi olması mümkün Bir JTable üzerinde 12 sütun için 12 filtrem var. Her filtre, JTextField türünde bir TextField'dır. Bir kullanıcı, metin kutusu filtresindeki verileri her girdiğinde arama gerçekleşir.Swing

Örnek: Farz edelim ki, bunların üzerinde 3 sütun ve 3 metin kutusu var. Şimdi, herhangi bir metin kutusuna yazılan herhangi bir şey benim tablo filtreleme yapmak zorunda. Harika oluyor. metin alanının her biri için

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

Metin alanı dinleyici

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

Sorum Ben gerçekten mutlu değildi 12 metin alanları için bu kodu tekrarlıyorum olduğunu, buna benzer. Bu sahip olduğumuz tek yol mu? ya da birileri bana daha iyi bir yol önerebilir mi?

cevap

8
  • Anonim bir sınıftan bir iç sınıfa geçin ve her bir alana aynı dinleyiciyi ekleyin. Kaynak,
  • olayında bulunur. Ayrı bir sınıf yapın ve her alan için ayrı dinleyiciler kullanmaya devam edin.

kod çoğaltma en az parlak bir iç sınıf

+0

+ 1 .. bir örnek için this tutorial bakınız önler .. Bir işe yaradı. Artık bir kod fazlalığı yok .. Çok teşekkürler .. :) – Amarnath

+2

Bunu yine de anonim bir sınıfla yapabilirsiniz: 'DocumentListener listener = new DocumentListener() {...}; (JTextField textfield: fields) için {textField.getDocument(). addDocumentListener (listener); } ' –

+0

@WalterLaan, – Robin