多个相互依赖的JComponents,没有递归循环

时间:2013-12-03 16:24:53

标签: java swing loops actionevent

对于最小的示例,我有三个需要互相交互的Swing JComponent元素:JSlider和两个JTextFieldsJSlider从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}}将由于四舍五入而永远不会达到“均衡”状态。我希望能简洁地描述这个问题。

1 个答案:

答案 0 :(得分:1)

SpinSlider可能是一个有用的起点。由于您必须能够“确定”最终值,因此一旦最终值可用,请使用getValueIsAdjusting()进行更新。