姬長信(Redy)

java – EventListenerList触发顺序


在Swing应用程序中,我有许多子面板,每个子面板都会监听一个JSlider.周围的父面板也会监听所有子面板.为了在下面的示例中获得一致的结果,我必须首先添加父级,然后添加本地侦听器.这是有道理的,考虑到EventListenerList中规定的顺序,并在article中进行了解释.我可以依赖该命令,还是应该安排发送不同的事件?
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);
    }