Изменение значения JLabel от значения JSlider - PullRequest
3 голосов
/ 06 августа 2009

У меня есть один JPanel, который содержит JSlider и JLabel. Я хочу настроить его так, чтобы при изменении значения JSlider пользователем это новое значение отражалось JLabel.

Я понимаю, что могу запускать ChangeEvents с помощью Slider, но я не знаю, как добавить ChangeListener в JLabel. Вот фрагмент моего кода.

scaleSlider.addChangeListener(new ChangeListener() {
    public void stateChanged(ChangeEvent event)
    {
        int currentTime = ((JSlider)event.getSource()).getValue();
        doSomething(currentTime);
        fireStateChanged(event);
    }

JLabel timeValue = new JLabel("Time: " + scaleSlider.getValue());
timeValue.add??? 

(я не знаю, что здесь делать, чтобы отразить изменения в ползунке)

Я иду в правильном направлении с этим? Заранее спасибо за помощь.

Ответы [ 3 ]

4 голосов
/ 06 августа 2009

Вы не слушаете ChangeEvents на JLabel. Вы слушаете ChangeEvents на JSlider и затем в методе stateChanged (), который вы просто используете

label.setText("Time: " + scaleSlider.getValue());

Нет необходимости запускать любое событие из ChangeLisetner.

2 голосов
/ 06 августа 2009

Вам не нужно добавлять прослушиватель изменений в JLabel. Если ваш JLabel является полем члена класса, который содержит код, вы можете ссылаться на JLabel в слушателе изменений JSlider, например, так:

public class Test() {
    private JLabel label;

    private void setup() {
        label = new JLabel();
        JSlider scaleSlider = new JSlider();
        scaleSlider.addChangeListener(new ChangeListener() {

            public void stateChanged(ChangeEvent event) {
                int currentTime = ((JSlider)event.getSource()).getValue();
                label.setText(currentTime);
            }
        }
    }
}

Вы можете ссылаться на любое поле внешнего класса в любом внутреннем классе, даже на анонимный внутренний класс ChangeListener, который вы объявили в scaleSlider.

2 голосов
/ 06 августа 2009

Что вам нужно сделать, это добавить слушатель изменений к ползунку.

Затем в методе изменения, который вы должны реализовать, измените значение текста в JLabel.

Что касается вашего кода, все, что нужно сделать doSomething(int), это:

label.setText(currentTime + "");
...