0

最小値がJSlider0 で最大値が 100 の があります。現在の値は 0 です。

実行時に、スライダーが移動するすべての値を取得するにはどうすればよいですか? たとえば、現在のコードでスライダーを 0 から 16 に非常に速く変更すると、次のような出力が表示されます。

0
1
2
3
4
7
16

スライダーを 7 から 16 に非常に速く直接移動したため、8 から 15 をスキップしました。しかし、私はそれが起こることを望んでいません。スライダーがその動きに出くわしたすべての値を出力したいと思います。

また、スライダーが移動中に取った最後の値をプログラムにキャプチャさせたいと考えています。

これは私のコードです:

p1.addChangeListener(new ChangeListener() 
{ 
   @Override public void stateChanged(ChangeEvent e) 
   { 
      if (p1.getValueIsAdjusting())
      { 
        System.out.println(p1.getValue()); 
      } 
   } 
});

これがすべての値を出力しない理由を誰かが説明できますか?

4

3 に答える 3

3

ほとんどの人は、中間値ではなく、最終的な JSlider 値だけが必要であるという反対の問題を抱えています。

Swing では、すべての中間値に対して変更リスナーが呼び出されるという保証はありません。

以前の JSlider 値を保持し、最終値を決定して、中間結果を自分で計算します。

于 2012-08-24T17:35:48.020 に答える
0

実行時に、スライダーが移動するすべての値を取得するにはどうすればよいですか?

aJSliderは事実上1次元なので、次のことをお勧めします。

  1. 開始値を取得する
  2. 最終値を取得する
  3. スライダーに使用されるモデルから、その間のすべての値を取得します。

ポイント3の結果はあなたの質問への答えのようです。

もちろん、それはそのような些細な答えなので、64ドルの質問を提起します。

ユーザーに提供しようとしているアプリケーション機能は何ですか? より良い答えを得るために、エンドユーザーに説明するかもしれないので説明してください。

于 2012-08-25T00:44:19.597 に答える
0

私が間違っていなければ、getValueIsAdjusting()あなたが見た行動に責任があります。ユーザーがスライダーをドラッグしている間、不要なコードの実行を避けるためにあります。

句を削除すると、ifすべての値が表示されます。

于 2012-08-24T16:54:22.807 に答える