1

我曾经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);

4

1 回答 1

4

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

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

panel.setBackground(transparentColor);
panel.setOpaque(false);
于 2013-07-03T13:49:52.600 回答