顶部有JComponents的动画

时间:2012-08-31 11:52:43

标签: java swing animation

我想问一下,如果有人可能有解决我面临的问题的方法。我正在一个应用程序,它绘制一个动画 - 例如一个移动对象的地图。我的问题是,在图纸的顶部,还放置了Jtable,Jlist以及其他组件。

在我的特定示例中,所有这些组件都已添加到Panel中,该Panel包含地图。结果,每个组件都被重新绘制,就像我的fps一样好。因此,使其中一个表不可见会将已经很高的CPU使用率降低,有时约为50%,低于30%。

我的问题是,如何避免调用某些静态视觉内容paintComponent()方法,而不使用“背景” - 地图 - 将菜单排除在外。

由于动画会永久重绘,因此菜单根本不显示,如果它与相应的JPanel分开。

首先想到的是:

剪辑 - 实际上并不像我想的那样好,因为id喜欢在菜单中移动。 JLayeredPane - 已经尝试但似乎结果是,菜单的paintComponent方法仍然经常被调用。 JWindow /内部框架 - 几分钟之前就有这种想法。拥有一个完整的独立容器应该能够处理我的问题,或者?

我很期待,如果有人有一个优雅的想法,如何解决这个问题并显着降低CPU使用率。

谢谢! 最好的祝福。

2 个答案:

答案 0 :(得分:3)

对于放置在JComponent(s)中的JPanel进行绘画,您需要查看

  1. JLayer (Java7)基于JXLayer(Java6)

  2. GlassPane,请注意所有JComponents必须是轻量级的,否则GlassPane会落后于重量级(J)Components

  3. 可以绘制到JViewport

  4. 修改

    1. 您必须使用Swing Timer移动Icon(位于JXLayerGlassPaneJViewportRunnable#Thread,不要使用Thread.sleep(int),也不要使用普通{{1}}

答案 1 :(得分:3)

我会为剪辑创建自定义形状。使用Area类并从Area中减去所有子组件的边界。