我对Swing绘画模型有点迷惑。
假设我有一个 JComponent comp,我做了类似的事情:
c.setBackground(Color.RED);
c.setBackground(Color.YELLOW);
很明显,最终的结果是颜色是黄色。
Swing 如何处理这个问题?
第一个调用是否会立即触发重绘,以便在黄色之前出现短暂的红色闪烁?这个序列比只涂黄色要慢得多吗?
如果我从 Swing Event 线程外部运行它,我会假设在大多数情况下(尽管可能存在竞争条件),当 Swing EDT 访问该属性时,该属性已经设置为黄色,因此永远不要涂成红色。
但是,我的理解是我应该从 Swing EDT 的 Runnable 内部进行这些调用。那是对的吗?在那种情况下,似乎 EDT 必须在没有任何“先行”的情况下完全执行每个更改?
最佳答案
窗口区域立即被标记为脏。稍后将在 EDT 上返回油漆请求。操作系统或事件队列机制(甚至组件)可能会合并重绘事件(严格来说是实现质量的问题,但实际上同一窗口中的重绘将被合并,即使它们不相交)。
应在 EDT 上调用 Swing 组件上的方法。 Event Dispatch Thread 属于 AWT,不属于 Swing。
关于java - Swing 如何处理对同一组件的连续更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1445045/