我的ChangeListener有什么问题

时间:2013-02-04 21:18:17

标签: java swing jslider changelistener

我在下面有一些changeListener的代码。基本上我需要将我的Voltage变量的值设置为我的JSlider当前所在的值。因此,如果我的滑块是5,那么我的变量电压将读为5.但是这不会发生,我不确定为什么。什么遗漏会将变量设置为具有我的JSlider所处的当前值?

public double getVoltageFromSlider() {

sliders.voltageSlider.addChangeListener(new ChangeListener() { 

 public void stateChanged(ChangeEvent event) {

                Voltage = (double) event.getSource();
                Voltage = sliders.voltageSlider.getValue();
            }
        });
        return Voltage;
    }

2 个答案:

答案 0 :(得分:1)

您的方法是向滑块添加更改侦听器,它实际上并未检索该值。您返回的值是分配给Voltage变量的值,我假设该变量是您的类的一个字段。

答案 1 :(得分:1)

看来你正在混合使用两种方法来获取电压:“拉出”滑块中的值,并使用监听器将值“推”到voltage变量中。

正如Marcelo所指出的,你的代码所做的是每次调用时它都会向滑块附加一个新的ChangeListener,但是会立即返回当前绑定到voltage变量的值,而不是等待听众实际设置值。

相反,您应该尝试以下方法之一:

  1. 创建滑块时,ChangeListener附加到滑块,并让侦听器设置voltage变量的值。在这种情况下,不需要getVoltageFromSlider方法。
  2. 使用getter(或只调用sliders.voltageSlider.getValue())根据需要检索滑块的值。在这种情况下,听众不是必需的。
  3. 然而,我的建议是坚持听众,因为这样voltage变量始终是最新的。并删除行Voltage = (double) event.getSource(),因为事件的来源是JSlider本身,这将导致异常。