Java 顶部带有JComponents的动画

Java 顶部带有JComponents的动画,java,swing,animation,Java,Swing,Animation,我想问,是否有人能解决我面临的问题。我正在开发一个应用程序,它可以绘制一个动画,例如一个带有移动对象的地图。我的问题是,在图形的顶部,还放置了一个Jtable、Jlist以及其他组件 在我的特定示例中,所有这些组件都已添加到保存地图的面板中。结果,每个组件都会像我的fps一样频繁地重新绘制。因此,使其中一个表不可见可以减少已经很高的cpu使用率,有时约为50%到不到30% 我的问题是,如何避免调用某种程度上静态的视觉内容paintComponent()方法,而不让菜单中的“背景”——地图——变白

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

在我的特定示例中,所有这些组件都已添加到保存地图的面板中。结果,每个组件都会像我的fps一样频繁地重新绘制。因此,使其中一个表不可见可以减少已经很高的cpu使用率,有时约为50%到不到30%

我的问题是,如何避免调用某种程度上静态的视觉内容paintComponent()方法,而不让菜单中的“背景”——地图——变白

由于动画将永久重画,如果菜单与相应的JPanel分离,则根本不显示菜单

最初的想法会朝以下方向发展:

剪辑-实际上没有我想的那么好,因为我想在菜单上移动。 JLayeredPane-已经尝试过,但结果似乎是,菜单的paintComponent方法仍然经常被调用。 JWindow/内部框架-几分钟前就有这个想法。拥有一个完整的独立容器应该能够处理我的关心,或者

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

谢谢!!
致以最良好的祝愿

用于将
jc组件
放置在
JPanel
中进行绘制

  • 基于

  • 请注意,所有
    J组件必须是轻量级的,否则在重量级
    (J)组件后面是
    GlassPane

  • 有可能画到

  • 编辑

  • 您必须使用将(在)移动到
    JXLayer
    GlassPane
    JViewport
    ,不要使用
    Runnable#Thread
    ,也不要使用普通
    Thread.sleep(int)

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

    为了更快地获得更好的帮助,请发布一个Hm。问题似乎是,由于这些组件中的任何一个都被放在小程序的内容窗格中,所有paintComponent()方法都会被调用。因此,有一个剪裁区域来避免“在”这些组件后面绘制似乎只是它的一半。我也尝试过使用GlassPane,但实际上也使用了不同的级别来确保,哪个组件在其他组件之前绘制,结果仍然会在GlassPane中的任何添加组件上调用paintComponent。好吧,因为地图是从几个组件扩展而来的,我必须将剪辑设置在适当的位置。因此,地图的重画不会发生在给定区域。出于某种原因——我的一个菜单组件被绘制了一次或两次——就像我喜欢的那样,但菜单的位置只是一个灰色区域。小程序的该部分甚至没有绘制任何内容,除了菜单的初始绘制。