0

我有JSlider一个最小值为 0,最大值为 100。它的当前值为 0。

在运行时如何获得滑块移动的每个值?例如,使用我当前的代码,如果我将滑块从 0 快速更改为 16,它会显示如下输出:

0
1
2
3
4
7
16

它跳过了 8 到 15,因为我将滑块直接从 7 快速移动到了 16。但我不希望这种情况发生。我希望打印滑块在其运动中遇到的每个值。

我还希望程序捕获滑块在其运动中的最后一个值。

这是我的代码:

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. 获取起始值
  2. 获取最终值
  3. 从用于滑块的模型中获取介于两者之间的每个值。

第 3 点的结果似乎是您问题的答案。

当然,既然这是一个微不足道的答案,那么它就会提出 64 美元的问题......

您想为用户提供什么应用程序功能? 像您向最终用户解释它一样解释它,以获得更好的答案。

于 2012-08-25T00:44:19.597 回答
0

如果我没记错的话,对getValueIsAdjusting()你看到的行为负责。当用户拖动滑块时,它可以避免不必要的代码执行。

如果删除该if子句,您应该会看到每个值。

于 2012-08-24T16:54:22.807 回答