当前位置:  开发笔记 > 编程语言 > 正文

处理AWT Graphics上下文的最佳方法是什么?

如何解决《处理AWTGraphics上下文的最佳方法是什么?》经验,为你挑选了1个好方法。

我们的Swing应用程序的一些用户报告显示器上出现了奇怪的人工制品.这范围从组件没有正确地重新绘制一秒或两秒,直到应用程序的整个部分被重新绘制,如窗口区域上的平铺壁纸.

在五年左右的时间里,这个应用程序已经由经验丰富的Java人员和大学之外的所有级别的开发人员一起工作,正如您所期望的那样,一些AWT代码是彻头彻尾的混乱.我现在面临着在接下来的几个月左右努力纠正尽可能多的坏事的任务.

其中一些很容易处理.仅在事件调度线程上处理组件,异步处理IO,有点事情,我希望将消息传递给团队的其他成员.

我想知道的是处理Graphics上下文的最佳方法,特别是在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等?



1> Tom Hawtin -..:

根据Filthy Rich Clients,你不应该改变Graphics传递给你的对象(作为API,IMO很糟糕).

处理它的正确方法稍微冗长一点:

public void paintComponent(Graphics g1) {
    super.paintComponent(g1);
    final Graphics2D g = (Graphics2D)g1.create();
    try {
         // ...Whole lotta drawing code...
    } finally {
         g.dispose();
    }
}

IIRC,在Sun实现中,如果不处理"子图形"对象并不重要.(不要引用我的话.)

您可能希望将该注释位委托给另一个对象.

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有