在java中,我如何获得滑块更改的值?

时间:2012-08-24 16:17:40

标签: java swing jslider

我有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()); 
      } 
   } 
});

有谁可以解释为什么不打印每个值?

3 个答案:

答案 0 :(得分:3)

大多数人都有相反的问题,因为他们只想要最终的JSlider值,而不是中间值。

在Swing中无法保证每个中间值都会调用您的更改侦听器。

保留以前的JSlider值,确定最终值,并自己计算中间结果。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

  

在运行时如何获取滑块移动的每个值?

由于JSlider实际上是一维的,我建议:

  1. 获取起始值
  2. 获取最终价值
  3. 从用于滑块的模型中获取每个值。
  4. 第3点的结果似乎是你问题的答案。

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

    您尝试为用户提供哪些应用程序功能?向最终用户解释,以获得更好的答案。