3

我正在将 Java2D 用于我正在编写的游戏,并且在我开始将它与其他摇摆组件集成之前使用它没有任何问题。我的问题是当我添加到 JFrame 的第一个组件不是我正在绘制的画布时,当我将鼠标悬停在文本窗格的滚动条上时,会出现一个奇怪的工件。每次我执行应用程序时都会发生这种情况。当我先有画布时,没有问题。

由于某种原因,这似乎仅在使用默认 Java2D 管道时(恰好是 sun.java2d.d3d=true)在 Windows 上发生,并且出现了工件。当我设置 sun.java2d.opengl=true 或 sun.java2d.noddraw=false AND sun.java2d.d3d=false 时,它​​不会发生。

我猜这是 Direct3D Java2D 管道的某种错误?我可以轻松解决它,但想知道是否有其他人遇到过这样的问题?我正在运行最新的 JDK7u7,但它也发生在以前的版本中。我应该注意,如果我最小化窗口并恢复它,工件就会消失并且永远不会返回,直到我重新启动应用程序。

与神器: 坏的

没有工件(先添加画布而不是 JLabel 图像之后): 好的

如果有人对此有任何进一步的信息,我将不胜感激。谢谢!

4

1 回答 1

5

这是一个众所周知的伪影,因为它未能尊重opacity属性。因为“Swing 程序应该覆盖 paintComponent()而不是覆盖paint()”,所以一定要super.paintComponent()在你的实现中首先调用。这里这里都有相关的例子。

附录:另见混合重量级和轻量级组件

于 2012-10-12T01:57:46.750 回答