2009-04-13 10 views
6

JList için özel bir hücre oluşturucu oluşturduğum her zaman, eklediğim öğeler hiçbir zaman eylemlere yanıt vermez. Örneğin, hücre oluşturucunun üzerinde bir JPanel varsa, bunlardan biri ActionListener'e sahipse, yanıt vermez.Java Swing - JList özel hücre oluşturma - eylemleri yakalama

Bu neden?

+1

Çok güzel bir soru. ItemListeners ile bir ilgisi olabileceğini düşündüm, ama şimdi öyle düşünmüyorum ... Örnek kod bulmayı denedim ama başarılı olmadı. – Uri

+0

Merhaba, aynı problemle karşı karşıyayım, sorunu çözebiliyor musunuz? – user236501

cevap

6

Liste hücre oluşturucusu olarak döndürdüğünüz öğe tam olarak şu şekilde tasarlanmıştır: rendering. Dinleyicileri JList ile kaydedin (genellikle bir ListSelectionListener istersiniz).

11

oluşturucu hücreler için bileşenleri döndürmek için bir fabrika gibi görünebilir, ama aslında yaklaşımı render sineksiklet izler ve tüm hücreleri işlemek için aynı bileşenini kullanır (getListCellRendererComponent() her çağrı yeniden gerekiyordu Belirli bir hücre için aynı bileşen örneğini ve hücrenin işlenebilmesi için döndürün).

Bu şekilde, her bir hücre için bileşenleri tanıtmak zorunda kalmadan, JList (JTable ve JTree gibi) büyük miktarda hücreye sahip olabilirsiniz. Bir yan etki olarak, render bileşeni yalnızca render döngüsünde kullanıldığı, ancak bileşen ağacında görünmediği için olaylara yanıt veremez.

Neil Coffey yerine JList (JTable, JTree) için dinleyicileri ekleyin ve etkilenen hangi hücre sevk ve böylece hücre spesifik mantığı ile başa çıkmak için yardımcı yöntemler (locationToIndex(...), getCellBounds(...)) kullanabilir, söz konusu gibi.

+1

+1 İyi bir açıklama için – basszero

+1

İşlenmiş parçayı lastik damga olarak düşünün. –