【发布时间】:2012-01-08 13:26:25
【问题描述】:
在我的应用程序中,我有 View 观察 Model 的变化。 Controller负责处理View派发的事件并更新Model。
为了举例,假设我有两个视图。首先,InputView 包含两个 JSpinner 元素(Spinner1 和 Spinner2)。其次,ResultView,包含来自微调器的值的JLabel。作为附加约束,我们希望Spinner2 的值依赖于Spinner1 的值。可以说,Spinner2 中的最小值应该是2x 的当前值Spinner1。
当我们更改Spinner1 的值时,Controller 接收ChangeEvent 并更新Model。由于我们还必须调整Spinner2 的值,另一个ChangeEvent 将被调度,Model 将第二次更新。这种模式的问题在于,每个Model 更新观察View 刷新。因此,在此示例中,View 将刷新 3 或 4 次而不是 1 次(Spinner1 更改,Spinner2 最小值更改,Spinner2 值更改)。这会导致闪烁。
如何确保在所有更改完成后View 只更新一次?
【问题讨论】:
-
请发布一个SSCCE,因为我不知道闪烁,您的代码中肯定还有另一个递归问题
-
闪烁是指视图随之刷新。如果我们使用某种图表或任何比标签更复杂的东西,多次刷新就会很明显
标签: java model-view-controller swing