私は自分のプログラムで JSlider を使用しており、同じために ChangeListener を実装しています。
public void stateChanged(ChangeEvent e)
{
JSlider source=(JSlider) e.getSource();
frame_value.setText(Integer.toString(source.getValue()));
//Condition to change the frame_no only when user has stopped moving the slider
if (!source.getValueIsAdjusting())
{
frame_no=(int) source.getValue()-1;
if(frame_no<0)
frame_no=0;
}
....
}
何が起こっているかというと、ChangeListener が呼び出されるたびに、プログラムは if ブロックをスキップして、その後のコードに移動します。なぜこれが起こっているのかわかりません。JSlider から正しい値を取得できません。助けてください!!
PS: これが理由かどうかはわかりませんが、最近 JSlider の UI を設定して、クリックした場所に目盛りを配置しました。それが原因かどうかはわかりません。コードは次のとおりです。
slider.setUI(new MetalSliderUI() {
protected void scrollDueToClickInTrack(int direction) {
int value = HEVC_Analyzer.slider.getValue();
value = this.valueForXPosition(HEVC_Analyzer.slider.getMousePosition().x);
HEVC_Analyzer.slider.setValue(value);
}
});