Java 什么';处理AWT图形上下文的最佳方法是什么?
我们Swing应用程序的一些用户报告说,屏幕上出现了奇怪的人工制品。这包括组件在一两秒钟内没有正确地重新喷漆,直到应用程序的整个部分被重新喷漆,就像窗口区域上的瓷砖墙纸一样 从有经验的Java开发人员到刚从大学毕业的年轻人,各个级别的开发人员在五年左右的时间里都在开发这个应用程序,正如你所料,一些AWT代码完全是一团糟。我现在面临的任务是,在未来几个月左右的时间里,尽可能多地纠正这些不好的地方 有些问题很容易处理。只在事件分派线程上处理组件,异步处理IO之类的事情,我希望能将消息传达给团队的其他成员 我想知道的是处理图形上下文的最佳方法,特别是在paintComponent()上下文中。我看到很多Java 什么';处理AWT图形上下文的最佳方法是什么?,java,swing,graphics,awt,Java,Swing,Graphics,Awt,我们Swing应用程序的一些用户报告说,屏幕上出现了奇怪的人工制品。这包括组件在一两秒钟内没有正确地重新喷漆,直到应用程序的整个部分被重新喷漆,就像窗口区域上的瓷砖墙纸一样 从有经验的Java开发人员到刚从大学毕业的年轻人,各个级别的开发人员在五年左右的时间里都在开发这个应用程序,正如你所料,一些AWT代码完全是一团糟。我现在面临的任务是,在未来几个月左右的时间里,尽可能多地纠正这些不好的地方 有些问题很容易处理。只在事件分派线程上处理组件,异步处理IO之类的事情,我希望能将消息传达给团队的其他
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参数将在其他油漆中重复使用,那么我不需要将其恢复到良好状态、撤消仿射变换等吗?我听说这已在jdk-1.6.12中修复,但没有尝试过。根据肮脏的富客户端,您不应该更改传递给您的
图形对象(在我看来,这是一个糟糕的API)
正确的处理方法稍微冗长一些:
public void paintComponent(Graphics g1) {
super.paintComponent(g1);
final Graphics2D g = (Graphics2D)g1.create();
try {
// ...Whole lotta drawing code...
} finally {
g.dispose();
}
}
IIRC,在Sun实现中,不处理“子图形”对象并不重要。(不要引用我的话。)
您可能希望将该注释位委托给另一个对象