防止在GlassPane重绘上重绘RootPane

时间:2015-04-21 23:27:13

标签: java swing animation graphics2d

此问题与Paint on a glass pane without repainting other components类似。但我无法弄清楚如何应用那里提供的解决方案。

我的问题是我们有一个非常复杂的RootPane,很多组件,重新绘制它很昂贵。我们还在JFrame的GlassPane上运行了一个动画。我注意到动画的每个刻度都是重新绘制动画,但是也会导致底层RootPane上的所有内容重新绘制。

我已尝试用各种代码覆盖RootPane的paint()方法,但它总是会导致RootPane上的组件被擦除并导致大量闪烁,可能是因为子组件尝试重新绘制自己时更新了动画:

pnlContent = new JRootPane() {
   @Override
   public void paint(Graphics g) {
      OurGlassPaneWithAnimation glass = ...
      if (glass != null && glass.animation != null && glass.animation.isAlive()) {
         //Animation running, do something cool so root pane still looks good without repainting out the wazoo
      } else { super.paint(g); }
   }
};

也许把动画放在GlassPane中是个坏主意?我们将把它改为居中的JPanel。或者是否有一种很好的方法可以使用GlassPane将背景RootPane的重绘保持在最低限度?

1 个答案:

答案 0 :(得分:0)

@MadProgrammer感谢您提供重绘(rect)而不仅仅是重绘()的建议解决了问题。现在我们可以将动画fps调高到我们想要的高度,并且它不会明显影响后面的RootPane的加载时间。这是代码段。

update `users` set `username` = REPLACE(username, "-JB
", "-OD")