java - Swing 如何处理对同一组件的连续更改?

标签 java performance swing

我对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/

相关文章:

java - 组合框 ItemListener 中触发事件的顺序是什么

java - 可以通过 OSGI 与运行在不同服务器上的组件进行通信

java - python 导入在 java 中的 runExec 中失败

java - 运行时为 "No suitable driver",但不在 IDE 中

c++ - 快速加载文件格式的寄存器宽度和解析

java - 如何将 JProgressBar 的值设置为另一个类的引用?

java - 如何刷新与jtable绑定(bind)的Jscrollpane中的数据?

php - 动态检索图像尺寸的最快方法

java - 用于了解 Java 程序性能的 Eclipse 插件

Java 远程桌面管理