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);
}
}
2つの簡単な回避策で問題が解決するようです。2回目の呼び出しを使用するslider.setLabelTable(null)
か、その前に。これを考えると、ラベルテーブルが正しく更新されていないように見えます。slider.setLabelTable(slider.createStandardLabels(25))
setMajorTickSpacing
これが意図した動作であるかどうかはわかりません。私の最初の本能は、目盛りの間隔を更新するとラベルも更新されるはずですが、2つを分離するための引数もあります。
だから私はそれがどれであるか知りたいです-これはバグですか、JSlider
それとも意図された振る舞いですか?それが意図された行動である場合、その選択を行う際の顕著な理由は何でしょうか?