【发布时间】:2011-06-10 14:32:55
【问题描述】:
前段时间我问过this question。所有解决方案都是变通方法。
现在不可能了。我觉得这里有问题,但我不知道是Swing的MVC模型在概念上是错误的,还是我的想法在概念上是错误的。
问题又来了。我正在使用JList 来实现文档页面的缩略图列表。如果用户从列表中选择另一个缩略图,则加载该页面。为此,我将ListSelectionListener到JList,它在选择更改时,它加载该页面。但用户也可以使用另一个控件更改页面。自然,我希望通过在此处选择该页面来将其反映在缩略图列表中。所以我setSelectedIndex() 来更新JList。不幸的是,这产生了引发ListSelectionEvent 的不良影响,导致侦听器重新加载页面。
现在这里出了什么问题?我只是从其他地方更改了模型,所以我自然希望视图自行更新,但我不希望它触发事件。 Swing 没有实现 MVC 对吗?还是我在这里漏掉了一点?
【问题讨论】:
-
感谢大家的精彩回答!我接受了@britishmutt 的回答,因为它最详细、最有见地,并且包含最干净的解决方案。问题是加载页面的组件应该看到它被请求加载相同的页面并且不应该这样做。这些链接非常有用。我还是觉得 Swing 的 MVC 模型有缺陷。他们应该走传统的路。他们的模型似乎比它的价值更麻烦。
-
我在监听器更新中多次遇到同样的问题。想象一下,如果您有 N 个必须相互更新的组件......即使您检查真实的显示更改以决定是否触发事件,之后其他 N-1 个组件也会触发 N-1 个事件他们得到更新。
标签: java model-view-controller swing jlist