如何仅重绘一层JLayeredPane图层?

时间:2016-05-26 10:41:05

标签: java swing jlayeredpane

我正在编写一个包含两个主要层(JLayeredPane s)的图层(我使用JPanel)的应用程序。我覆盖了底部paintComponent的{​​{1}}方法(称之为Map),因此它绘制了一个Map,并在顶部绘制了一个Panel方法(称之为selectionPanel)所以它描绘了一个元素的选择。

以下是结构摘要:

图层 -        | -selectionPanel(在上面)        | -Map(底部)

我希望Map保持静态,即不要进行任何重绘(初始的除外),因为它不会改变。

麻烦的是,每当我调用selectionPanel.repaint()时,Map也会被重新绘制!这绝对没有效率。

我认为这是由于paintComponent的热切绘画行为。有没有办法在JLayeredPane中禁用此功能?

如果您有兴趣看到上述效果,我已修改此example

JLayeredPane

1 个答案:

答案 0 :(得分:2)

  

有没有办法在JLayeredPane中禁用此功能?

如果不是JLayeredPane功能。这是一个Swing绘画功能。

this.setOpaque(false);

当你使一个组件不透明时,Swing需要重新绘制父组件以确保背景被正确绘制。

在您的情况下,您似乎使用透明度,因此您肯定需要重新绘制背景。

  

每当我调用selectionPanel.repaint()时,Map也会被重新绘制

如果您只绘制子面板的某个区域,则可以使用:

selectionPanel.repaint(Rectangle)

尽量减少重新绘制的区域。

color = new Color(r.nextInt());

请勿更改paintComponent()方法中的颜色。这应该在MouseListener中完成,因此它只影响您单击的面板。因此即使其他面板将被重新粉刷,它们的颜色也不会随意改变。