2

我想问一下,是否有人可以解决我面临的问题。我正在一个应用程序中工作,该应用程序绘制动画 - 例如带有移动对象的地图。我的问题是,在绘图的顶部,还放置了一个 Jtable、Jlist 以及其他组件。

在我的特定示例中,所有这些组件都已添加到保存地图的面板中。结果,每个组件都像我的 fps 一样频繁地重绘。因此,使其中一张表不可见可以将本来就很高的 cpu 使用率(有时大约 50% 降低到 30% 以下)降低。

我的问题是,我怎样才能避免调用有些静态的视觉内容 paintComponent() 方法,而没有“背景” - 地图 - 使菜单变白。

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

最初的想法转向以下方向:

剪辑——实际上没有我想的那么好,因为我喜欢在菜单中移动。JLayeredPane - 已经尝试过但似乎结果是,菜单的paintComponent 方法仍然被频繁调用。JWindow/Internal Frame - 几分钟前有这个想法。拥有一个完整的独立容器应该可以处理我的问题,或者?

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

谢谢!!此致。

4

2 回答 2

3

对于绘画过度JComponent(s)放置在JPanel你有看

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

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

  3. 可以画到JViewport

编辑

  1. 您必须使用Swing Timer移动图标(在JLabel中)放入JXLayerGlassPane或者JViewport,不要使用Runnable#Thread并且永远不要,而不是使用普通Thread.sleep(int)
于 2012-08-31T11:57:38.380 回答
3

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

于 2012-08-31T11:58:18.660 回答