swing—在java中,如何获取滑块更改的值?

fruv7luv  于 2021-07-09  发布在  Java
关注(0)|答案(3)|浏览(282)

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

有人能解释为什么这不是打印所有的值吗?

5cnsuln7

5cnsuln71#

在运行时,如何获得滑块所移动的每个值?
自从 JSlider 实际上是一维的,我建议:
获取起始值
获取最终值
从用于滑块的模型中获取中间的每个值。
第三点的结果。似乎是你问题的答案。
当然,既然这是一个如此微不足道的答案,那么它就提出了一个64美元的问题。。
您想为用户提供什么应用程序功能?像向最终用户解释一样解释,以获得更好的答案。

fnx2tebb

fnx2tebb2#

如果我没弄错的话 getValueIsAdjusting() 对你看到的行为负责。它可以避免在用户拖动滑块时执行不必要的代码。
如果你移除 if 子句,你应该看到每一个值。

u7up0aaq

u7up0aaq3#

大多数人有相反的问题,因为他们只想要最终的jslider值,而不是中间值。
在swing中,不能保证每个中间值都会调用您的变更侦听器。
保留以前的jslider值,确定最终值,然后自己计算中间结果。

相关问题