对于最小的示例,我有三个需要彼此交互的Swing JComponent元素:一个JSlider和两个JTextFieldsJSlider从0到50,其中一个JTextFields显示JSlider的值,第二个JTextField显示总值的百分比(即JSlider中的2将在第二个)。

三个要素中任何一个的变更都应更新所有其他要素。因此,JTextField中的ChangeEvent应该触发JSlider中的setText()事件。但是,JTextFields会触发setText()中的ActionEvents,在这种情况下,应触发TextFields的值更改。

我一直在用“刷新” JSlider标志来解决此问题,在处理boolean / ActionEvent之前,将检查布尔值。但我想知道是否还有其他程序化或更简洁的方法来防止ChangeEvent / ActionEvent循环。

我将不胜感激!



编辑

我正在尝试使用直方图信息来实现此目的,直方图信息的百分比值将与滑块值不完全匹配(即会出现舍入误差)。建议的SpinSliders依靠ChangeEvent方法能够“结算”最终值。换句话说,如果输入到setText()的值与其已经保存的文本相同,则不会触发setText(),从而有效地结束了循环。如果舍入关闭,则由于舍入,ActionEventsetValue()JSlidersetText()将永远不会达到“平衡”状态。我希望能简要地描述问题。

最佳答案

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

10-07 18:48