Используйте JSlider для обновления JLabel в реальном времени

Я пытаюсь заставить JSlider обновить JLabel в режиме реального времени, но он просто выдает ошибки. Вот мой код:

slider.addChangeListener(new ChangeListener() {
   public void stateChanged() {
       label.setText(String.valueOf(slider.getValue()));
   }
 });

Может ли кто-нибудь увидеть, где я ошибся? Спасибо,


person Tia    schedule 05.04.2016    source источник
comment
"Can anyone see where I've gone wrong?" -- кажется, что в коде, который вы разместили, нет ничего плохого, предполагая, что ошибка находится в другом месте. Если вам все еще нужна помощь, улучшите вопрос, создав и опубликовав минимально воспроизводимый пример. Мы не хотим видеть всю вашу программу, а скорее вы должны сжать свой код до наименьшего фрагмента, который все еще компилируется, не имеет лишнего кода, который не имеет отношения к вашей проблеме, но все же демонстрирует вашу проблему. Вы вполне можете решить проблему самостоятельно, просто попытавшись изолировать и выявить ошибку.   -  person Hovercraft Full Of Eels    schedule 05.04.2016
comment
Кроме того, опубликуйте все сообщения об ошибках, с которыми вы можете столкнуться.   -  person Hovercraft Full Of Eels    schedule 05.04.2016


Ответы (1)


Я был неправ, в вашем коде есть очень простая ошибка: ваш метод stateChanged неверен, так как он требует параметра ChangeEvent. Сдача

public void stateChanged() {

to

public void stateChanged(ChangeEvent e) {

Сообщение об ошибке компилятора должно рассказать вам обо всем этом, и в будущем вы захотите критически прочитать эти сообщения, так как они избавят вас от многих проблем, если вы это сделаете.

Например:

import java.awt.BorderLayout;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class SliderFoo extends JPanel {
    private JSlider slider = new JSlider(0, 100, 50);
    private JLabel label = new JLabel("   ", SwingConstants.CENTER);

    public SliderFoo() {
        slider.addChangeListener(new ChangeListener() {
            @Override
            public void stateChanged(ChangeEvent e) {
                label.setText(String.valueOf(slider.getValue()));
            }
        });

        slider.setMajorTickSpacing(20);
        slider.setMinorTickSpacing(5);
        slider.setPaintTicks(true);
        slider.setPaintLabels(true);

        JPanel topPanel = new JPanel();
        topPanel.add(new JLabel("Slider Value:"));
        topPanel.add(label);

        setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
        setLayout(new BorderLayout(5, 5));
        add(topPanel, BorderLayout.PAGE_START);
        add(slider);
    }

    private static void createAndShowGui() {
        SliderFoo mainPanel = new SliderFoo();

        JFrame frame = new JFrame("SliderFoo");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.getContentPane().add(mainPanel);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            createAndShowGui();
        });
    }
}
person Hovercraft Full Of Eels    schedule 05.04.2016