对于最小的示例,我有三个需要彼此交互的Swing JComponent
元素:一个JSlider
和两个JTextFields
。 JSlider
从0到50,其中一个JTextFields显示JSlider的值,第二个JTextField
显示总值的百分比(即JSlider
中的2将在第二个)。
三个要素中任何一个的变更都应更新所有其他要素。因此,JTextField
中的ChangeEvent
应该触发JSlider
中的setText()
事件。但是,JTextFields
会触发setText()
中的ActionEvents
,在这种情况下,应触发TextFields
的值更改。
我一直在用“刷新” JSlider
标志来解决此问题,在处理boolean
/ ActionEvent
之前,将检查布尔值。但我想知道是否还有其他程序化或更简洁的方法来防止ChangeEvent
/ ActionEvent
循环。
我将不胜感激!
编辑
我正在尝试使用直方图信息来实现此目的,直方图信息的百分比值将与滑块值不完全匹配(即会出现舍入误差)。建议的SpinSliders依靠ChangeEvent
方法能够“结算”最终值。换句话说,如果输入到setText()
的值与其已经保存的文本相同,则不会触发setText()
,从而有效地结束了循环。如果舍入关闭,则由于舍入,ActionEvent
的setValue()
和JSlider
的setText()
将永远不会达到“平衡”状态。我希望能简要地描述问题。
最佳答案
SpinSlider
可能是一个有用的起点。由于您必须能够“结算”最终值,因此一旦有最终值可用,请使用getValueIsAdjusting()
更新。