java - 在 Swing 工作线程之外更改模型是否可以?

标签 java user-interface swing concurrency

在“严肃的”Java GUI 应用程序中,许多 GUI 元素背后都有模型:A DocumentModel支持 JEditorPane ,例如,或 ListModelJList后面.

我们总是被告知不要从 Swing 工作线程外部更改 GUI,并给出 SwingUtilities.invoke...()解决这个问题。好吧,我可以忍受!当直接更改 GUI 组件的属性时,这当然是必要的(并且效果很好)。

理想情况下,无论如何,我的大多数 GUI 可见更改将针对模型,而不是针对 JComponents。但是因为它们是 GUI 可见的,所以它们是否“算”为 GUI 更改? IE。更改事件和监听器是否提供必要的解耦,或者模型更改是否需要包装在 invoke...() 中还有吗?

对于 Swing 专家来说,这可能是老生常谈了,但我找不到任何明确说明这种或那种方式的引用资料。

最佳答案

一般来说,模型的改变必须被包装到invokeLater(...)中。我查看的大多数 Swing 类的模型代码都没有解耦。

您可以创建一个模型,该模型可以包含用于检查是否在事件调度程序线程上进行了 GUI 修改的调用。

关于java - 在 Swing 工作线程之外更改模型是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1845642/

相关文章:

java - Debugger.Launch() 的 Java 等价物是什么?

c - Tizen 屏幕键盘(输入组件)文本截断

java - Swing组件占用大量内存

wpf - 如何在 Expression Blend 中更改不同状态的按钮文本颜色?

java - 使用 JScrollPane 后 JTable 消失

java - 访问 JTextField 文本

java - 在 JDO 中迁移字段

java - 我可以模拟父类(super class)方法调用吗?

JAVA_HOME 在 Ubuntu 上没有正确定义?

java - 使用 GUI 输入添加到 ArrayList