更改主要刻度间距的第一个索引
Change first index of major tick spacing
我有一个 JSlider
,范围从 1 到 60。我每 10 个刻度标记一次,从 10 开始。我的滑块代码是这样的:
JSlider slider = new JSlider(1, 60);
slider.setValue(20);
slider.setMajorTickSpacing(10);
slider.setMinorTickSpacing(1);
slider.setLabelTable(slider.createStandardLabels(10, 10));
slider.setPaintLabels(true);
slider.setPaintTicks(true);
slider.setSnapToTicks(true);
查看代码,行为基本上是预期的;它创建一个具有给定范围的滑块,将值设置为 20,将主要刻度间隔为 1、11、21 等,标签为 10、20、30 等。但是,我希望主要刻度线与标签为 10、20、30 等,但没有方法 setMajorTickSpacing(int spacing, int start)
。
是否有任何变通方法可以使用 setMajorTickSpacing
执行与 createStandardLabels(10, 10)
等效的操作,以便主要刻度线与标签对齐?
编辑:我的问题是刻度,而不是标签。我希望每 1 个刻度增量创建刻度, 主要刻度 (不是标签)从 10 开始每 10 的倍数创建一次。与 Java Slider - how to make custom ticks? 不同,这个刻度模式 是 统一,只是不是从滑块的最小值开始。如果我理解正确,setLabelTable
只允许更改标签,而不是未标记的刻度。
我找到了一个解决方法,几乎可以实现我想要的功能:
JSlider slider = new JSlider(0, 60); //minimum=0 so major ticks appear on multiples of 10
slider.setValue(20);
slider.setMajorTickSpacing(10);
slider.setMinorTickSpacing(1);
slider.setLabelTable(slider.createStandardLabels(10, 10));
slider.setPaintLabels(true);
slider.setPaintTicks(true);
slider.setSnapToTicks(true);
//If the slider is set to 0, reset it to 1
slider.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
if (((JSlider) e.getSource()).getValue() == 0)
((JSlider) e.getSource()).setValue(1);
}
});
这样,滑块的值仍然具有 有效 最小值 1,但技术上具有最小值 0,因此主要刻度出现在正确的数字处。在我看来,这是一种丑陋的做法,但它确实为滑块提供了我想要的行为。我会等一会儿接受这个作为答案,以防万一有人找到更好的方法。
我有一个 JSlider
,范围从 1 到 60。我每 10 个刻度标记一次,从 10 开始。我的滑块代码是这样的:
JSlider slider = new JSlider(1, 60);
slider.setValue(20);
slider.setMajorTickSpacing(10);
slider.setMinorTickSpacing(1);
slider.setLabelTable(slider.createStandardLabels(10, 10));
slider.setPaintLabels(true);
slider.setPaintTicks(true);
slider.setSnapToTicks(true);
查看代码,行为基本上是预期的;它创建一个具有给定范围的滑块,将值设置为 20,将主要刻度间隔为 1、11、21 等,标签为 10、20、30 等。但是,我希望主要刻度线与标签为 10、20、30 等,但没有方法 setMajorTickSpacing(int spacing, int start)
。
是否有任何变通方法可以使用 setMajorTickSpacing
执行与 createStandardLabels(10, 10)
等效的操作,以便主要刻度线与标签对齐?
编辑:我的问题是刻度,而不是标签。我希望每 1 个刻度增量创建刻度, 主要刻度 (不是标签)从 10 开始每 10 的倍数创建一次。与 Java Slider - how to make custom ticks? 不同,这个刻度模式 是 统一,只是不是从滑块的最小值开始。如果我理解正确,setLabelTable
只允许更改标签,而不是未标记的刻度。
我找到了一个解决方法,几乎可以实现我想要的功能:
JSlider slider = new JSlider(0, 60); //minimum=0 so major ticks appear on multiples of 10
slider.setValue(20);
slider.setMajorTickSpacing(10);
slider.setMinorTickSpacing(1);
slider.setLabelTable(slider.createStandardLabels(10, 10));
slider.setPaintLabels(true);
slider.setPaintTicks(true);
slider.setSnapToTicks(true);
//If the slider is set to 0, reset it to 1
slider.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
if (((JSlider) e.getSource()).getValue() == 0)
((JSlider) e.getSource()).setValue(1);
}
});
这样,滑块的值仍然具有 有效 最小值 1,但技术上具有最小值 0,因此主要刻度出现在正确的数字处。在我看来,这是一种丑陋的做法,但它确实为滑块提供了我想要的行为。我会等一会儿接受这个作为答案,以防万一有人找到更好的方法。