问题
I'm implementing a simple horizontal JSlider in Java. No tick marks or anything like that. Probably as simple as humanly imaginable.
When I try to "move" the JSlider left-right by dragging it with the mouse, its numerical value does update (I set up a system.out
print statement to report the slider's changing values, and they look fine).
However, the slider knob itself does not move. It just stays stuck where it started during initialization. Is there some sort of boilerplate code that "every JSlider should have" regarding this aspect?
I've been playing around with the "ChangeListener" stuff, but I keep hitting dead ends.
回答1:
Seems to work fine for me, please post SSCCE to show specific problems:
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class SwingSliderExample extends JPanel {
public SwingSliderExample() {
super(true);
this.setLayout(new BorderLayout());
final JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 50, 25);
slider.setMinorTickSpacing(2);
slider.setMajorTickSpacing(10);
slider.setPaintTicks(true);
slider.setPaintLabels(true);
// We'll just use the standard numeric labels for now...
slider.setLabelTable(slider.createStandardLabels(10));
slider.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent ce) {
if (!slider.getValueIsAdjusting()) {//no adjustments are taking place thus we know the value is final
System.out.println(slider.getValue());
}
}
});
add(slider, BorderLayout.CENTER);
}
public static void main(String s[]) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (Exception e) {
// If Nimbus is not available, you can set the GUI to another look and feel.
}
JFrame frame = new JFrame("Slider Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new SwingSliderExample());
frame.pack();
frame.setVisible(true);
}
});
}
}
Reference:
- http://www.java2s.com/Code/Java/Swing-JFC/AnexampleofJSliderwithdefaultlabels.htm
来源:https://stackoverflow.com/questions/14005488/jslider-knob-not-updating-basic-java