Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA中周期性UI更新的优雅解决方案_Java_Swing - Fatal编程技术网

JAVA中周期性UI更新的优雅解决方案

JAVA中周期性UI更新的优雅解决方案,java,swing,Java,Swing,我试图为用户创建一个新的UI组件,以两种方式指定整数值:使用滚动条或文本字段。我希望它是一个单一的UI组件,我可以从中调用类似于integerField.getValue()的东西,并让它返回组件表示的当前整数值 我的问题是,一个典型的循环更新情况:当使用滚动条更改基础整数值时,需要更新textfield值,这会触发另一个事件,导致滚动条更新-循环完成 换句话说,scrollbar.setValue()->component.setValue()->textField.setxt()->comp

我试图为用户创建一个新的UI组件,以两种方式指定整数值:使用滚动条或文本字段。我希望它是一个单一的UI组件,我可以从中调用类似于
integerField.getValue()
的东西,并让它返回组件表示的当前整数值

我的问题是,一个典型的循环更新情况:当使用滚动条更改基础整数值时,需要更新textfield值,这会触发另一个事件,导致滚动条更新-循环完成

换句话说,
scrollbar.setValue()->component.setValue()->textField.setxt()->component.valueChanged()->component.setValue()->scrollbar.setValue()

现在,我可以通过让此链中的第一项设置
布尔
标志,并让组件中的其他项在响应值更改事件之前检查标志来防止这种情况。然而,我不认为这是一个优雅的解决方案

有谁有更好的主意吗


谢谢

这个问题的技术解决方案是读取文本字段和上次更新时间,然后读取滑块和上次更新时间。在触发事件时,您将读取最近更新的值,如果值匹配,则停止更新和反应。

旋转滑块
,看到和,可能是一个不错的选择。它将一个
JSpinner
和一个
JSlider
组合在一起,以便每个组件的
ChangeListener
侦听另一个组件的
ChangeListener


挑剔,一个
JSlider
JScrollBar
更好的选择是的,我实际上有另一个组件使用JSlider,但有同样的问题=)@Freiheit,在我开发的应用程序中,用户重复请求了这两种类型的控件。使用滑块调整值有时更直观,有时需要使用显式值进行更精细的控制。“提交/更新”按钮会很麻烦,因为它是一系列用户想要操作并获得实时反馈的值。
JSpinner
。。。。。。?两全其美?删除并重新添加侦听器。。。但我认为使用“控制”标志是非常简单的原则,这将起作用。然而,在设计方面,它类似于使用布尔标志。