对于最小的示例,我有三个需要互相交互的Swing JComponent
元素:JSlider
和两个JTextFields
。 JSlider
从0到50,其中一个JTextField显示JSlider的值,第二个JTextField
显示总值的百分比(即JSlider
中的2将更新4第二个JTextField
中的%。)
三个元素中的任何一个元素的更改都应该更新所有其他元素。因此ChangeEvent
中的JSlider
应在setText()
中触发JTextFields
个事件。但是,setText()
ActionEvents
会触发TextFields
中的JSlider
,在这种情况下,应触发boolean
的值更改。
我一直用“刷新”ActionEvent
标志解决这个问题,在处理ChangeEvent
/ ActionEvent
之前会检查布尔值。但是我想知道是否有更多的程序化或更清晰的方法来阻止ChangeEvent
/ setText()
循环。
我很感激任何见解!
修改
我试图使用直方图信息来完成这项工作,其中百分比值与滑块值不完全匹配(即会出现舍入误差)。建议的SpinSliders依赖于setText()
方法能够“确定”最终值。换句话说,如果输入到ActionEvent
的值与它已经存在的文本相同,则它不会触发setValue()
,从而有效地结束循环。如果舍入为关闭,JSlider
的{{1}}和setText()
的{{1}}将由于四舍五入而永远不会达到“均衡”状态。我希望能简洁地描述这个问题。