此问题与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的重绘保持在最低限度?
答案 0 :(得分:0)
@MadProgrammer感谢您提供重绘(rect)而不仅仅是重绘()的建议解决了问题。现在我们可以将动画fps调高到我们想要的高度,并且它不会明显影响后面的RootPane的加载时间。这是代码段。
update `users` set `username` = REPLACE(username, "-JB
", "-OD")