gpt4 book ai didi

java - 这是 JSlider 中的错误吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:52:01 25 4
gpt4 key购买 nike

我在使用 JSlider 时遇到了一些问题类 - 特别是带有刻度标签。

我第一次使用 setMajorTickSpacingsetMinorTickSpacing 一切正常。但是,随后调用 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);
}
}

两个简单的解决方法似乎可以解决这个问题 - 在第二次调用 setMajorTickSpacing。鉴于此,标签表似乎没有正确更新。

我不确定这是否是预期的行为。我的第一直觉是更新刻度间距也应该更新标签,但也有将两者分开的论据。

所以我想知道它是什么 - 这是 JSlider 中的错误还是预期的行为?如果它预期的行为,那么做出该选择的突出原因是什么?

最佳答案

通过查看 setMajorTickSpacing 源代码,您可以很容易地找出问题的原因:

public void setMajorTickSpacing(int n) {
int oldValue = majorTickSpacing;
majorTickSpacing = n;
if ( labelTable == null && getMajorTickSpacing() > 0 && getPaintLabels() ) {
setLabelTable( createStandardLabels( getMajorTickSpacing() ) );
}
firePropertyChange("majorTickSpacing", oldValue, majorTickSpacing);
if (majorTickSpacing != oldValue && getPaintTicks()) {
repaint();
}
}

如果您调用此方法两次 - labelTable 值将不再为空,也不会更新。根据方法的评论,这可能是预期的行为:

 * This method will also set up a label table for you.
* If there is not already a label table, and the major tick spacing is
* {@code > 0}, and {@code getPaintLabels} returns
* {@code true}, a standard label table will be generated (by calling
* {@code createStandardLabels}) with labels at the major tick marks.

因此,每次您希望更新标签时,您都必须手动更新标签(除非您用自己的方法覆盖此方法来执行更新)。

关于java - 这是 JSlider 中的错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12562694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com