我对Swing绘画模型有点困惑。Swing如何处理对同一组件的连续更改?
假设我有一个JComponent补偿,我做这样的事情:
c.setBackground(Color.RED);
c.setBackground(Color.YELLOW);
显然,最终的结果是,颜色为黄色。
Swing如何处理这个问题?
第一次调用是否触发立即重新绘制,所以在黄色之前会有短暂的红色闪烁?这个序列是否比黄色涂料慢得多?
如果我是从Swing Event线程之外运行的,我会假设在大多数情况下(尽管竞争条件是可能的),到Swing EDT访问时,属性已经设置为黄色,永远不会有任何红色的画。
但是,我的理解是,我应该从Swing EDT中的Runnable内部进行这些调用。那是对的吗?在这种情况下,美国东部时间看起来似乎必须在没有任何“预测”的情况下全面执行每项变更?
汤姆,我有点困惑。如果我在invokeLater()或invokeAndWait()中运行这两个命令,它们中的每一个都不会立即出现?或者Swing在EDT上添加额外的invokeLaters()以及它自己的指令?另外,EDT和AWT调度线程是一样的吗? – Uri 2009-09-18 14:59:53
如果您在invokeLater内部运行,则整个代码块(在Runnable中)将在EDT上执行。查看我的回复 – 2009-09-18 15:02:50
如果使用'invokeLater' /'invokeAndWait',则该命令将排队并在与涂料相同的线程上执行。 'invokeLater' /'invokeAndWait'只需在AWT'EventQueue'上添加一个'InvocationEvent'即可。 – 2009-09-18 15:05:20