Swing uygulamasında, her biri tek bir JSlider
dinleyen çok sayıda alt panelim var. Çevredeki ana panel ayrıca tüm alt panelleri dinler. Aşağıdaki örnekte tutarlı sonuçlar elde etmek için, önce üst öğeyi ve sonra da yerel dinleyiciyi eklemeliydim. Bu, EventListenerList
'da belirtilen talimatlar verildiğinde ve bu article numaralı belgede açıklandığı gibi mantıklıdır. Bu siparişe güvenebilir miyim ya da farklı bir etkinlik göndermeyi ayarlamalı mıyım?EventListenerList ateş emri
class SubPanel extends JPanel implements ChangeListener {
private final JSlider slider = new JSlider();
private final JLabel label = new JLabel();
private final String name;
private float value;
public SubPanel(String name, float value, ChangeListener parent) {
this.name = name;
this.value = value;
...
slider.addChangeListener(parent);
slider.addChangeListener(this);
}
...
}
Ek: EventListenerList
tartışma uygulama tavsiyesi yerine bir garanti gibi görünüyor. pstanton tarafından önerilen zincirleme yaklaşımı, doğru siparişi daha güvenli bir şekilde uygular. Örneğin, SubPanel
's ChangeListener
, olayı yalnızca ebeveyne iletebilir. JSlider ve JComponent vb belgeleri dinleyici bildirim sırasını söz olmadığından
@Override
public void stateChanged(ChangeEvent e) {
...
parent.stateChanged(e);
}
İlginç bir soru ve tartışma! 1+ –
['Dönüştürücü'] (http://docs.oracle.com/javase/tutorial/uiswing/components/panel.html) uygulama' ConverterRangeModel' içinde bir örnek içerir. – trashgod
Sadece googling yaparken, yazılarınızı aldım, detaylarını açıklamak istedim. Lütfen mesaj sayımını yap ve tarif ettiğim bir şey yanlış olabilirse bana işaret et! – Sage