我使用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);
答案 0 :(得分:4)
插入其中的面板的背景颜色是新颜色(0,0,0,0) (透明)
默认情况下,JPanel的不透明度为true。如果设置透明背景颜色,则需要将不透明度设置为false - 否则您将获得绘画人工制品(如您所见)
panel.setBackground(transparentColor);
panel.setOpaque(false);