首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Graphics.clearRect和Graphics.drawRect有什么不同?

Graphics.clearRect和Graphics.drawRect有什么不同?
EN

Stack Overflow用户
提问于 2011-05-04 15:19:03
回答 2查看 11.5K关注 0票数 0

我在一些代码中发现了一个渲染错误,并找到了一种解决方法,但我想知道为什么我会得到不同的行为。在旧代码中,背景(有时)会呈现为白色,尽管调试getBackground()时会返回正确的颜色。

旧代码:

代码语言:javascript
复制
@Override
public void paint(Graphics g) {
  // Stuff

  g.setColor(getBackground());
  g.clearRect(0, 0, width, height); // Obviously wrong.

  // More stuff
}

新代码:

代码语言:javascript
复制
@Override
public void paint(Graphics g) {
  // Stuff

  g.setColor(getBackground());
  g.drawRect(0, 0, width, height); // Correct usage with 'setColor' call.

  // More stuff
}

正如我在代码中所说的,很明显,setColor(getBackground())clearRect(...)调用没有任何影响。然而,我假设调用clearRect(...)和先调用setColor(getBackground())再调用drawRect(...)在语义上是相同的。

我也考虑了不透明性属性,但是父轻量级组件和祖先重量级组件都使用相同的背景颜色,并且很明显这个组件具有不正确的行为(它是父组件所拥有的8个相同类型的组件中的一个-但只有到达这段代码的组件才有问题)。

我正在使用JDK 1.6.0_07 (当然是出于业务原因),如果这有帮助的话。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-04 16:33:22

以下是来自JavaDocs的信息-

通过用当前绘图图面的背景色填充指定的矩形来清除该矩形。此操作不使用当前的绘制模式。

从Java 1.1开始,屏幕外图像的背景颜色可能取决于系统。应用程序应该先使用setColor,然后使用fillRect,以确保将离屏图像清除为特定颜色。

如上所述,clearRect依赖于系统,并且不考虑getBackground()的值。

票数 4
EN

Stack Overflow用户

发布于 2012-11-05 05:41:42

区别在于:

  • 如果您使用图形方法fillRect(),则不能通过使用drawRect()在以像素为单位指定的相同重新角线上擦除颜色。
  • 但如果您使用图形方法fillRect(),则使用clearRect()清除它,然后使用drawRect();您将获得满意和结论。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5879884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档