【发布时间】:2012-09-22 08:27:10
【问题描述】:
我尝试优化我的应用程序的绘图。目前我已经实现了一个动画以及几个 GUI 组件。有些是完全分开的,有些是相互重叠的。目前我面临摆动组件重叠的问题。 GUI 的一部分,与我的动画重叠,需要绘制大量字符串和 - 放入 Jlist 中 - 常见的摆动组件。
结果,重叠的 GUI 会随着动画的更新而重绘。我尝试使用很多不同的方法来确保在彼此面前绘制的内容。 GlassPane、Jlayeredpane 之类的东西。不幸的是,在这些尝试中,重叠的 Menus paintcomponent 方法(仅在用户与其交互时才需要调用)由于动画而被频繁调用并导致相当高的 cpu 使用率。
我尝试在分层窗格中以较低的顺序放置菜单,即:
getLayeredPane().add(map, JLayeredPane.DEFAULT_LAYER);
getLayeredPane().add(mapController, JLayeredPane.PALETTE_LAYER);
getLayeredPane().add(settings, JLayeredPane.PALETTE_LAYER);
getLayeredPane().add(painter, JLayeredPane.POPUP_LAYER);
在画家的绘画过程中,我尝试修改该区域 - 即:
@Override
protected void paintComponent(Graphics g) {
g2 = (Graphics2D)g;
g2.setRenderingHints(DefaultResources.getRenderQuality());
g2.clip(JMain.getInstance().getMapBounds());
...}
好吧 - 只要画家组件 !isOpague();下面的所有组件都将重新绘制。不幸的是,如果我确实将菜单置于更高的顺序,它们也需要随着任何动画更新而重新绘制。
有人知道如何避免使用动画组件永久重绘重叠组件吗?
我见过的唯一解决方案是使用重量级容器。不幸的是,相对定位在移动目的期间也表现出一种行为,这是不合适的。
感谢您的任何建议!
【问题讨论】:
-
1.请问
g2.clip(JMain.getInstance().getMapBounds());是什么,2. 为获得更好的帮助,请尽快发布SSCCE 演示导致的问题
标签: java swing animation paint jlayeredpane