Java 2个JPanel的奇怪问题

Java 2个JPanel的奇怪问题,java,swing,jpanel,jlayeredpane,Java,Swing,Jpanel,Jlayeredpane,我有一个JFrame,其中包含一个JLayeredPane,其中包含两个JPanel,一个在另一个之上 前面的JPanel是一个简单的网格布局,带有一些按钮 后面的JPanel是一个必须定期更改的图像。这基本上是一个相机快照,必须每秒更新几次 要定期在此JPanel上绘制图像,我将调用此updateImage方法: public void updateImage(Image image) { if(image == null) return; setSize(image.getW

我有一个JFrame,其中包含一个JLayeredPane,其中包含两个JPanel,一个在另一个之上

前面的JPanel是一个简单的网格布局,带有一些按钮

后面的JPanel是一个必须定期更改的图像。这基本上是一个相机快照,必须每秒更新几次

要定期在此JPanel上绘制图像,我将调用此updateImage方法:

public void updateImage(Image image)
{
    if(image == null) return;
    setSize(image.getWidth(null),image.getHeight(null));
    this.image = image;
    this.repaint();
}

@Override
public void paintComponent(Graphics g)  
{   
    super.paintComponent(g);
    g.drawImage(image,0,0,null); 
} 
但是,每次调用paintComponent时,前面的面板都会隐藏

我尝试过几种不同的方法,最接近成功的方法是打电话:

((JLayeredPane)this.getParent()).setLayer(this, 0);
在paintComponent方法的底部。这是可行的,但速度太慢了

我还能做什么

顺便说一句,这不是JLayeredPane的问题,我已经尝试过其他几个布局管理器,基本上每次它都会隐藏后面的面板


非常感谢您的建议

是否在EDT上调用updateImage()方法?您是否尝试使用JLabel而不是自定义组件来绘制图像?你有没有试过这个?如果您需要更多帮助,请发布适当的SSCCE,因为发布的代码不够详细,无法看出您可能做错了什么。但是,无法确定,为什么不将背景面板布局设置为BorderLayout并将顶部面板添加到其中。另外,确保顶部面板是透明的(setOpaque(false)),也不需要多层。只需在面板上绘制图像,然后将组件添加到同一面板。或者使用JLabel作为容器,只需将标签的布局设置为使用GridLayout并直接向其中添加组件即可。噢,哇,使用JLabel很有效!谢谢