我正在使用Java2D进行我正在编写的游戏,并且在我开始将其与其他swing组件集成之前没有遇到任何问题。我的问题是当我添加到JFrame的第一个组件不是我正在绘制的画布时,当我将鼠标悬停在文本窗格的滚动条上时,我会看到一个奇怪的神器。每次执行应用程序时都会发生这种情况。当我第一次使用画布时,没有问题。
出于某种原因,这似乎只发生在Windows上,当使用默认的Java2D管道时(恰好是sun.java2d.d3d = true),并且会发生工件。当我设置sun.java2d.opengl = true或sun.java2d.noddraw = false AND sun.java2d.d3d = false时,它不会发生。
我猜这是Direct3D Java2D管道的某种错误?我可以轻松地解决它,但很想知道是否有其他人遇到过这样的问题?我正在运行最新的JDK7u7,但它也适用于以前的版本。我应该注意,如果我最小化窗口并恢复它,那么工件就会消失,并且在我重新启动应用程序之前永远不会返回。
带有工件:
没有工件(首先添加画布而不是JLabel图像):
如果有人对此有任何进一步的信息,我会很感激。谢谢!
答案 0 :(得分:5)
这是一个众所周知的工件,因为它未能遵守opacity属性。由于“Swing程序should override paintComponent()
而不是覆盖paint()
,”请务必先在您的实施中调用super.paintComponent()
。有相关示例here和here。