В приложении Swing у меня есть несколько подпанелей, каждый из которых прослушивает один JSlider
. Окружающая родительская панель также прослушивает все вспомогательные панели. Чтобы получить согласованные результаты в приведенном ниже примере, мне пришлось сначала добавить родителя и , а затем - локальный слушатель. Это имеет смысл, учитывая порядок, предписанный в EventListenerList
и объясненный в этом article. Могу ли я полагаться на этот заказ или я должен организовать отправку другого мероприятия?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);
}
Интересный вопрос и обсуждение! 1+ –
Приложение ['Конвертер'] (http://docs.oracle.com/javase/tutorial/uiswing/components/panel.html) включает пример в' КонвертерRangeModel'. – trashgod
Я только что получил ваше сообщение в то время как 'googling', хотел объяснить подробно. пожалуйста, сделайте почтовый подсчет и укажите мне, если что-то, что я описал, может быть неправильным! – Sage