В приложении Swing у меня есть много подпанелей, каждый слушающий сингл JSlider
. Окружающая родительская панель также слушает все подпанели. Для получения последовательных результатов в примере ниже я должен был добавить родителя сначала и затем локального слушателя. Это имеет смысл, учитывая распоряжение, предписанное в EventListenerList
и объяснил в этой статье. Я могу полагаться на тот порядок, или я должен расположить отправить другое событие?
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);
}
...
}
Приложение: обсуждение в EventListenerList
кажется, совет реализации, а не гарантия. Подход объединения в цепочку, предложенный pstanton, осуществляет правильный порядок более надежно. Например, SubPanel
ChangeListener
может просто передать событие к родителю.
@Override
public void stateChanged(ChangeEvent e) {
...
parent.stateChanged(e);
}
Так как в документации для JSlider и JComponent и т.д. не упоминается порядок уведомления слушателей, я бы не колебался полагаться на него, по крайней мере, без тщательного тестирования на каждой последующей версии JRE.
Если вам действительно нужно полагаться на порядок, подумайте о создании цепочки слушателей, т.е. слушатель один будет уведомлять слушателя два и т.д.