麻烦制作面板的背景图像

时间:2014-11-03 17:09:31

标签: java image swing jpanel

我正在尝试将背景图像添加到JPanel。 Paint组件似乎不会绘制为背景导入的图像。谁能指出为什么?我导入了所有必要的库。

public class ImagePanel  extends JPanel {
    public static BufferedImage image;

    public ImagePanel() {
        try {
            image = ImageIO.read(new File("cards/background.png"));
            System.out.println("Image Import Succesful");
        } catch (IOException ex) {
            System.out.println("IMAGE IMPORT ERROR");
        }
        ImageIcon icon = new ImageIcon(image);
        icon.setImage(image);
        JLabel imageLabel = new JLabel(icon);
        add(imageLabel);

    }


    @Override
    protected void paintComponent(Graphics g) {
        System.out.println("painted");
        super.paintComponent(g);
        g.drawImage(image, 100, 100,
                    this); 
    }
}

1 个答案:

答案 0 :(得分:0)

您从哪里加载图片? 文件系统类路径

如果您从类路径加载图像,则可以使用类加载器加载图像。如果从文件系统加载图像,则指向该文件的路径文件必须是绝对路径。

如果要从类路径加载图像,可以绘制面板的背景:

public class ImagePanel  extends JPanel {

   private ImageIcon imageIcon;

    public ImagePanel() {
       prepareBackground();
    }

    @Override
    protected void paintComponent(Graphics g) {
           super.paintComponent(g);
           if (null!= imageIcon)
               g.drawImage(image.getImage(), 100, 100, this);
           else
               System.err.println("Background image is NULL!!");
        }
    }

    private void prepareBackground() {
        final java.net.URL imgURL = ImagePanel.class.getResource("cards/background.png");
        imageIcon = new ImageIcon(imgURL);
    }
}

如果您从文件系统加载,则可以在此处更正代码:

  

image = ImageIO.read(新文件(" COMPLETE_PATH_TO_background.png"));