在“严肃的”Java GUI 应用程序中,许多 GUI 元素背后都有模型:A DocumentModel
支持 JEditorPane
,例如,或 ListModel
在JList
后面.
我们总是被告知不要从 Swing 工作线程外部更改 GUI,并给出 SwingUtilities.invoke...()
解决这个问题。好吧,我可以忍受!当直接更改 GUI 组件的属性时,这当然是必要的(并且效果很好)。
理想情况下,无论如何,我的大多数 GUI 可见更改将针对模型,而不是针对 JComponents。但是因为它们是 GUI 可见的,所以它们是否“算”为 GUI 更改? IE。更改事件和监听器是否提供必要的解耦,或者模型更改是否需要包装在 invoke...()
中还有吗?
对于 Swing 专家来说,这可能是老生常谈了,但我找不到任何明确说明这种或那种方式的引用资料。
最佳答案
一般来说,模型的改变必须被包装到invokeLater(...)中。我查看的大多数 Swing 类的模型代码都没有解耦。
您可以创建一个模型,该模型可以包含用于检查是否在事件调度程序线程上进行了 GUI 修改的调用。
关于java - 在 Swing 工作线程之外更改模型是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1845642/