Что не так с моим ChangeListener

У меня есть код для changeListener ниже. В основном мне нужно установить значение моей переменной Voltage на значение, на котором в данный момент находится мой JSlider. Итак, если бы мой ползунок был на 5, то моя переменная Voltage читалась бы как 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;
    }

person user2041029    schedule 04.02.2013    source источник
comment
В вашем вопросе нет JavaScript.   -  person Bergi    schedule 05.02.2013
comment
Не вызовет ли эта первая строка в stateChanged исключение? event.getSource() должен быть экземпляр JSlider.   -  person tobias_k    schedule 05.02.2013
comment
Чтобы быстрее получить помощь, опубликуйте SSCCE. Каждый раз, когда программа запрашивает напряжение, добавляется еще один слушатель. Это похоже на баг сам по себе.   -  person Andrew Thompson    schedule 05.02.2013


Ответы (2)


Ваш метод добавляет прослушиватель изменений к ползунку, а не извлекает значение. Возвращаемое вами значение — это значение, присвоенное переменной Voltage, которая, как я предполагаю, является полем вашего класса.

person Marcelo    schedule 04.02.2013
comment
Что мне нужно / нужно изменить, чтобы он извлек значение, которое находится на ползунке, и присвоил это значение переменной Voltage вместо добавления простого прослушивателя изменений? - person user2041029; 05.02.2013

Кажется, вы смешиваете два способа получить напряжение: «вытягивание» значения из ползунка и «вталкивание» значения в переменную voltage с помощью прослушивателя.

Что делает ваш код, как указал Марсело, так это то, что он прикрепляет новый ChangeListener к ползунку каждый раз, когда он вызывается, но затем немедленно возвращает значение, привязанное в настоящее время к переменной voltage, не дожидаясь, пока слушатель фактически установите значение.

Вместо этого следует попробовать одно из следующих действий:

  1. Либо прикрепите ChangeListener к ползунку при создании ползунка, и пусть слушатель установит значение переменной voltage. В этом случае метод getVoltageFromSlider не нужен.
  2. Или используйте геттер (или просто вызовите sliders.voltageSlider.getValue()), чтобы получить значение ползунка по мере необходимости. В этом случае слушатель не нужен.

Мое предложение, однако, состоит в том, чтобы придерживаться слушателя, поскольку таким образом переменная voltage всегда актуальна. И отбросьте строку Voltage = (double) event.getSource(), так как источником события является сам JSlider, что приведет к исключению.

person tobias_k    schedule 04.02.2013