I'm trying to make a JSlider update a JLabel in real time but it just comes up with errors. Here is my code so far:
slider.addChangeListener(new ChangeListener() {
public void stateChanged() {
label.setText(String.valueOf(slider.getValue()));
}
});
Can anyone see where I've gone wrong? Thanks,
I was wrong, there is a very basic error in your code: Your stateChanged method is wrong as it requires a ChangeEvent parameter. Change
public void stateChanged() {
to
public void stateChanged(ChangeEvent e) {
The compiler error message should tell all of this to you, and in the future, you'll want to read these messages critically, as they will save you much grief if you do.
For example:
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();
});
}
}