我正在使用此
在JPanel中设置背景图像JPanel panel = new JPanel(){
@Override
public void paint(Graphics g) {
super.paint(g);
g.drawImage(ImageHelper.createResizedCopy(image, height, width, false), 0, 0, null);
}
};
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.setPreferredSize(new Dimension(height, width));
panel.setOpaque(false);
panel.add(new JLabel("SCIENCE FAIR"));
panel.setBorder(new RoundedBorder(1,2,new Color(100, 200, 112)));
return panel;
我期待paintComponents方法响应,但不知何故paintComponents没有响应,但paint正在为JPanel中的背景图像绘制工作。 这个JPanel是另一个JPanel的孩子。 Parent JPanel正在使用MigLayout,在父JPanel中,我添加了4个不同的JPanel,它们具有不同的背景图像。
背景图片已完成,但在背景图片之上,我无法添加JLabel,所以我怀疑绘制方法是问题
答案 0 :(得分:2)
在画完孩子之后,你会画出整个组件 - 换句话说,你正在他们上面画画。 从不覆盖Swing组件中的paint()
;改为覆盖paintComponent()
,并确保在绘制背景图片后调用super.paintComponent()
。
答案 1 :(得分:1)
同样改变这个:
g.drawImage(ImageHelper.createResizedCopy(image, height, width, false), 0, 0, null);
对此:
g.drawImage(ImageHelper.createResizedCopy(image, height, width, false), 0, 0, this);
JPanel
是ImageObserver
,因此您也可以将其作为.. ImageObserver
提供。