我想问一下,如果有人可能有解决我面临的问题的方法。我正在一个应用程序,它绘制一个动画 - 例如一个移动对象的地图。我的问题是,在图纸的顶部,还放置了Jtable,Jlist以及其他组件。
在我的特定示例中,所有这些组件都已添加到Panel中,该Panel包含地图。结果,每个组件都被重新绘制,就像我的fps一样好。因此,使其中一个表不可见会将已经很高的CPU使用率降低,有时约为50%,低于30%。
我的问题是,如何避免调用某些静态视觉内容paintComponent()方法,而不使用“背景” - 地图 - 将菜单排除在外。
由于动画会永久重绘,因此菜单根本不显示,如果它与相应的JPanel分开。
首先想到的是:
剪辑 - 实际上并不像我想的那样好,因为id喜欢在菜单中移动。 JLayeredPane - 已经尝试但似乎结果是,菜单的paintComponent方法仍然经常被调用。 JWindow /内部框架 - 几分钟之前就有这种想法。拥有一个完整的独立容器应该能够处理我的问题,或者?
我很期待,如果有人有一个优雅的想法,如何解决这个问题并显着降低CPU使用率。
谢谢! 最好的祝福。
答案 0 :(得分:3)
对于放置在JComponent(s)
中的JPanel
进行绘画,您需要查看
GlassPane,请注意所有JComponents
必须是轻量级的,否则GlassPane
会落后于重量级(J)Components
可以绘制到JViewport,
修改
JXLayer
)GlassPane
,JViewport
或Runnable#Thread
,不要使用Thread.sleep(int)
,也不要使用普通{{1}} 答案 1 :(得分:3)
我会为剪辑创建自定义形状。使用Area类并从Area中减去所有子组件的边界。