我们的 Swing 应用程序的一些用户报告了显示屏上出现的奇怪伪影。这包括组件在一两秒钟内没有正确地重新绘制自身,直到应用程序的整个部分被重新绘制,就像窗口区域的平铺墙纸一样。
在五年左右的时间里,从经验丰富的 Java 小伙到刚从大学毕业的年轻小伙子,各个级别的开发人员都在开发该应用程序,正如您所料,一些 AWT 代码完全是一团糟。我现在面临的任务是在接下来的几个月左右的时间里尽可能多地纠正错误。
其中一些很容易处理。仅在事件调度线程上处理组件,异步 IO 之类的事情,我希望将消息传递给团队的其他成员。
我想知道的是处理图形上下文的最佳方式,尤其是在paintComponent() 上下文中。我看到很多...
public void paintComponent( Graphics g ) {
super.paintComponent( g );
Graphics2D gfx = (Graphics2D)g;
// ...Whole lotta drawing code...
}
这样做更好吗?
public void paintComponent( Graphics g ) {
super.paintComponent( g );
Graphics2D gfx = (Graphics2D)g.create();
// ...Whole lotta drawing code...
gfx.dispose();
}
如果 g 参数要在其他绘画中重复使用,那么我不需要将其恢复到良好状态,撤消 AffineTransforms 等吗?