我有一个JEditorPane
和一个JList
。当用户在JList
中选择一个元素时,将执行一个网站查询,并将结果HTML
写入JEditorPane
。
但是,如果用户很快地滚动到JList
,则会出现一个问题,因为每次更改都启动一个新的查询,并且JEditorPane
按可能错误的顺序更新(单个结果可能会花费不可预测的更长或更短的时间返回),并导致当前列表选择和JEditorPane
不同步,这意味着列表选择现在显示错误的结果。
有什么办法确保这件事不会被搞砸吗?
我尝试创建更新JEditorPane
synchronized
(无效果)的方法,在启动查询时禁用JList
(无效果),或在查询进行时使用Thread.sleep()
暂停EDT
(冻结gui)。这些解决办法都不令人满意。
gui需要保持灵活性,但绝不能像上面所描述的那样失去同步。
发布于 2014-10-22 22:38:53
可能有一种非常简洁的方法可以控制JEditorPane
的加载过程,但为了简单起见,我可能会考虑使用javax.swing.Timer
。
基本上,当选择发生变化时,您将启动配置为短时间的(只运行一次) Timer
(例如250毫秒或so...as )。
每次选择发生变化,计时器将被重新启动,从而防止计时器触发它的ActionListener
.
一旦选择改变停止,计时器将被允许运行它的过程,触发ActionListener
,这将允许您向JEditorPane
提出请求
查看如何使用摆动计时器以获得更多想法,只需确保将它的repeats
属性设置为false
;)
https://stackoverflow.com/questions/26518167
复制相似问题