4

JSlider が浮動小数点数を処理できないことに気付きました。Swing/AWT の代替案を推奨できる人はいますか?

編集:またはいくつかの説明の回避策。

4

1 に答える 1

7

一般に、スライダーは数値の範囲を扱います。実際の実装から、各スライダーには 2 つの要素が必要です。

  1. 開始位置。
  2. 「次の」インクリメントの有限数。

あなたを悩ませているのは「有限数」です。有限数の増分がないと、スライダーは画面に収まりません。有限数のインクリメントでfloatは、2 つのインクリメンタル「ステップ」の間にある数を選択することはできません。

要するに、それは不可能です。したがって、回避策は次のとおりです。

  1. 入力の「浮動」側の範囲を決定します。これは0.0fto10.0fでも何でもかまいませんが、範囲が必要です。
  2. サポートする最小の増分を決定します。これは0.1f、または0.001f何でもかまいませんが、問題ではありませんが、インクリメントが必要です。
  3. 関数のペアを作成します。1 つは Slider 整数値を取り、それらを float 値に「マップ」し、もう 1 つは float 値を取り、それらを Slider 値に「マップ」します。

インクリメント付きの5.0ftoの例:10.0f0.1f

((10.0f - 5.0f) / 0.1f) + 1 = 51 increments (0 to 50)

updateSlider(float value) {
  if (value > 10.0f) {
    Slider.setValue(50);
  } else if (value < 5.0f) {
    Slider.setValue(0);
  } else {
    Slider.setValue((int)Math.round((value - 5.0f)/0.1f));
  }
}

float updateFloat(Slider slider) {
  int value = slider.getValue();
  return 5.0f + (slider.getValue() * 0.1f);
}
于 2012-04-17T18:47:06.847 に答える