4

我刚刚意识到 JSlider 无法处理浮点数。任何人都可以推荐一个 Swing/AWT 替代品吗?

编辑:或者一些描述的解决方法。

4

1 回答 1

7

滑块通常处理数字范围。从实际实现来看,每个滑块必须有两个元素:

  1. 一个起始位置。
  2. 有限数量的“下一个”增量。

给你带来麻烦的是“有限的数字”。如果没有有限数量的增量,滑块就无法适应屏幕。对于有限数量的增量,不可能选择float位于两个增量“步骤”之间的数字。

简而言之,这是不可能的;所以,这是解决方法:

  1. 确定输入的“浮点”端的范围。这可能是0.0fto10.0f或其他,没关系,但你必须有一个范围。
  2. 确定您希望支持的最小增量。这可能是0.1f0.001f其他,没关系,但你必须有一个增量。
  3. 创建一对函数。一种采用 Slider 整数值并将它们“映射”到浮点值,另一种采用浮点值并将它们“映射”到 Slider 值。

一个例子,5.0f用于10.0f增加0.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 回答