gpt4 book ai didi

java - 处理 AWT 图形上下文的最佳方式是什么?

转载 作者:搜寻专家 更新时间:2023-11-01 02:56:25 25 4
gpt4 key购买 nike

我们的 Swing 应用程序的一些用户报告说显示器上出现了奇怪的伪像。这包括组件在一两秒内没有正确地重新绘制自身,一直到应用程序的整个部分都被重新绘制,就像窗口区域上的瓷砖墙纸一样。

在五年左右的时间里,从经验丰富的 Java 专家到大学刚毕业的年轻人,各个级别的开发人员都在开发该应用程序,正如您所预料的那样,一些 AWT 代码完全是一团糟.我现在面临的任务是在接下来的几个月左右的时间里尽可能多地纠正错误。

其中一些很容易处理。仅在事件分派(dispatch)线程上处理组件,异步 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 等吗?

最佳答案

根据 Filthy Rich Clients 的说法,您不应该更改传递给您的 Graphics 对象(在我看来,它作为 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 实现中,如果您不处理“子图形”对象并不重要。 (不要引用我的话。)

您可能希望将该注释位委托(delegate)给另一个对象。

关于java - 处理 AWT 图形上下文的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/602688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com