嵌套的JPanel的背景图像未正确重绘

时间:2013-07-03 13:11:29

标签: java image swing jpanel paintcomponent

我使用ImageIO.read来获取图像(BackgroundImage)并将背景图像绘制成如下:

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);        
    g.drawImage(background, 0, 0, backDim.width, backDim.height, null);
}

我在JPanel上添加了一些组件(插入其中的面板的背景颜色为new Color(0,0,0,0)(透明)。 启动时正确显示背景图像;但是,当我将它拖到屏幕的底部边缘时,其中一半会被删除。当我将其拖动到屏幕的左边缘或右边缘时,它会被重新绘制。

啊,当我删除Box.createRigidArea()间隙时,只会正确显示标题的背景。其他空间只是JPanel(浅灰色)的默认颜色。

编辑:我添加了一个组件监听器,每次移动窗口时都会绘制屏幕,​​但它会经常重新调用,因此计算机可能会过载。还有其他解决方案吗?

编辑:问题是当我将窗口(包含带有背景图像的嵌套JPanel)移动到底部时,某些(或大部分)绘制的图像会被删除屏幕并拖回来。但是,repaint()未被调用。

最终修改已解决。这是因为我没有调用setOpaque(false);

1 个答案:

答案 0 :(得分:4)

  

插入其中的面板的背景颜色是新颜色(0,0,0,0)   (透明)

默认情况下,JPanel的不透明度为true。如果设置透明背景颜色,则需要将不透明度设置为false - 否则您将获得绘画人工制品(如您所见)

panel.setBackground(transparentColor);
panel.setOpaque(false);