|
|
1
5
通常,模型更改必须包装到Invokelater(…)中。在我所研究的大多数Swing类的模型代码中没有解耦。 由您创建一个模型,该模型可以包含调用,检查是否在事件调度程序线程上修改了GUI。 |
|
2
2
如果事件从EDT触发并更新Swing组件,这将是一个问题。 在Swing文本中,事件可以是也可以不是(!)转到EDT。这使得测试变得棘手。毫不奇怪,API在多线程环境中并不有用。
所以:最简单的保持模型在EDT上,其他线程应该传递消息(涉及
|
|
3
2
是的,非常肯定。 虽然这是真的,但您不应该在EDT之外修改Swing组件。您当然可以在EDT之外更改他们的模型。 如果已将模型正确连接到Swing组件,则视图更新和EDT调度几乎将自动进行。 见: http://java.sun.com/products/jfc/tsc/articles/architecture/#roots 请参见有关JavaBeans事件模型的部分。 这就是模型如何以EDT安全的方式将其更改后的状态传递给GUI。当创建新的GUI组件时,您应该遵循这个设计模式。 还要注意GUI状态模型和应用程序数据模型之间的区别。 从EDT更改模型仍然需要小心。事实上,当程序员在EDT中修改模型时,当他们应该从一个单独的线程修改模型时,大多数Swing问题都会发生。(臭名昭著的冻结图形用户界面问题) 此外,这些都不排除完全了解典型的多线程陷阱。 但您可以从EDT外部对JTableModel进行更改。 |
|
|
Jörg · 如何更改多行JButton中的行距 10 月前 |
|
|
Clive Galway · 将摆动元件包装在面板顶部 1 年前 |
|
|
AlexHomeBrew · 如何将图像放在左上角的滚动窗格中 1 年前 |
|
|
Vithor Roder · Java CellEditor 1 年前 |
|
|
Dromlius · JPanel透支重叠的JComcoBox 1 年前 |