我正在编写一个包含两个主要层(JLayeredPane
s)的图层(我使用JPanel
)的应用程序。我覆盖了底部paintComponent
的{{1}}方法(称之为Map),因此它绘制了一个Map,并在顶部绘制了一个Panel
方法(称之为selectionPanel)所以它描绘了一个元素的选择。
以下是结构摘要:
图层 - | -selectionPanel(在上面) | -Map(底部)
我希望Map保持静态,即不要进行任何重绘(初始的除外),因为它不会改变。
麻烦的是,每当我调用selectionPanel.repaint()时,Map也会被重新绘制!这绝对没有效率。
我认为这是由于paintComponent
的热切绘画行为。有没有办法在JLayeredPane中禁用此功能?
如果您有兴趣看到上述效果,我已修改此example:
JLayeredPane
答案 0 :(得分:2)
有没有办法在JLayeredPane中禁用此功能?
如果不是JLayeredPane功能。这是一个Swing绘画功能。
this.setOpaque(false);
当你使一个组件不透明时,Swing需要重新绘制父组件以确保背景被正确绘制。
在您的情况下,您似乎使用透明度,因此您肯定需要重新绘制背景。
每当我调用selectionPanel.repaint()时,Map也会被重新绘制
如果您只绘制子面板的某个区域,则可以使用:
selectionPanel.repaint(Rectangle)
尽量减少重新绘制的区域。
color = new Color(r.nextInt());
请勿更改paintComponent()方法中的颜色。这应该在MouseListener中完成,因此它只影响您单击的面板。因此即使其他面板将被重新粉刷,它们的颜色也不会随意改变。