EventListenerList, запускающий порядок

В приложении 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);
    }

8
задан Community 23 May 2017 в 12:34
поделиться

1 ответ

Так как в документации для JSlider и JComponent и т.д. не упоминается порядок уведомления слушателей, я бы не колебался полагаться на него, по крайней мере, без тщательного тестирования на каждой последующей версии JRE.

Если вам действительно нужно полагаться на порядок, подумайте о создании цепочки слушателей, т.е. слушатель один будет уведомлять слушателя два и т.д.

4
ответ дан 5 December 2019 в 23:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: