我有一个 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条答案
按热度按时间5cnsuln71#
在运行时,如何获得滑块所移动的每个值?
自从
JSlider
实际上是一维的,我建议:获取起始值
获取最终值
从用于滑块的模型中获取中间的每个值。
第三点的结果。似乎是你问题的答案。
当然,既然这是一个如此微不足道的答案,那么它就提出了一个64美元的问题。。
您想为用户提供什么应用程序功能?像向最终用户解释一样解释,以获得更好的答案。
fnx2tebb2#
如果我没弄错的话
getValueIsAdjusting()
对你看到的行为负责。它可以避免在用户拖动滑块时执行不必要的代码。如果你移除
if
子句,你应该看到每一个值。u7up0aaq3#
大多数人有相反的问题,因为他们只想要最终的jslider值,而不是中间值。
在swing中,不能保证每个中间值都会调用您的变更侦听器。
保留以前的jslider值,确定最终值,然后自己计算中间结果。