我在使用JSlider类时遇到了一些问题——特别是使用刻度标签。
我第一次使用setMajorTickSpacing
,setMinorTickSpacing
一切都按预期工作。但是,后续调用setMajorTickSpacing
更新刻度,而不是标签。我写了一个简单的例子来演示这种行为:
import java.awt.event.*;
import javax.swing.*;
public class SliderTest {
public static void main(String args[]) {
JFrame frame = new JFrame();
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
});
frame.setSize(300, 250);
JSlider slider = new JSlider(0, 100, 0);
slider.setMajorTickSpacing(10);
slider.setMinorTickSpacing(1);
slider.setPaintLabels(true);
slider.setPaintTicks(true);
slider.setMajorTickSpacing(25);
slider.setMinorTickSpacing(5);
frame.add(slider);
frame.pack();
frame.setVisible(true);
}
}
两个简单的解决方法似乎可以解决问题 - 使用slider.setLabelTable(null)
或slider.setLabelTable(slider.createStandardLabels(25))
在第二次调用setMajorTickSpacing
. 鉴于此,标签表似乎没有正确更新。
我不确定这是否是预期的行为。我的第一直觉是更新刻度间距也应该更新标签,但也有将两者分开的论点。
所以我想知道它是什么 - 这是一个错误JSlider
还是预期的行为?如果这是预期的行为,那么做出该选择的突出原因是什么?