【问题标题】:Determine who call stateChanged确定谁调用 stateChanged
【发布时间】:2013-05-20 06:11:39
【问题描述】:

我有几个看起来像这样的滑块:

//Create the slider
    JSlider speedSlider = new JSlider(JSlider.VERTICAL, MIN_SPEED, MAX_SPEED, initValue);
    speedSlider.addChangeListener(controller);
    speedSlider.setMajorTickSpacing(MAJOR_TICK_SPACING);
    speedSlider.setPaintTicks(true);

    panel.add(speedSlider);

在我的 View.java 类中

有Controller.java

public class Controller implements ControllerInterface {

    //...

    @Override
    public void stateChanged(ChangeEvent e) {
        JSlider source = (JSlider)e.getSource();
        if (!source.getValueIsAdjusting()) {
            int speed = (int)source.getValue();
            if (0 == speed) {
                // stop
            }
            else {
                model.setSpeedBody(speed);
            }
        }
    }
}

问题是我无法确定它到底是什么滑块事件,怎么办? (ControllerInterface 扩展 ChangeListener)

【问题讨论】:

    标签: java swing model-view-controller actionlistener changelistener


    【解决方案1】:

    测试source的值:

    JSlider source = (JSlider)e.getSource();
    if (source == speedSlider) {
        ...
    }
    else if (source == gearSlider) {
        ...
    }
    

    或者为每个滑块添加一个特定的监听器,这样每个监听器就只知道一个滑块的变化:

    speedSlider.addChangeListener(new ChangeListener() {
        @Override
        public void stateChanged(ChangeEvent e) {
            ...
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多