swing JPanel paint方法正在响应,但期望paintComponents在设置背景图像时做出响应

时间:2012-02-22 04:26:14

标签: swing jpanel

我正在使用此

在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,所以我怀疑绘制方法是问题

2 个答案:

答案 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);

JPanelImageObserver,因此您也可以将其作为.. ImageObserver提供。