前段时间我在这里提出了一个问题。所有的解决方案都是一些变通方法。
现在这不应该再是这样的。我感觉有些不对劲,但我无法确定是 Swing 的 MVC 模型本身有问题,还是我的思维方式有问题。
问题如下:我使用一个 JList
实现了文档页面缩略图列表,当用户从列表中选择另一个缩略图时,相应页面就会被加载。为此,我向 JList
添加了一个 ListSelectionListener
,当选择改变时,它就会加载相应页面。但是,用户也可以使用其他控件来更改页面,我希望在缩略图列表中反映出这一点,即选中当前页面的缩略图。所以我通过调用 setSelectedIndex()
来更新 JList
。但不幸的是,这会产生一个不必要的 ListSelectionEvent
,导致监听器重新加载页面。
那么问题出在哪里呢?我只是从其他地方更改了模型,自然希望视图更新自己,但我并不希望它触发事件。Swing 是不是没有正确实现 MVC?还是我错过了某个关键点?