将图像加载到java中的背景中

时间:2014-03-04 01:33:13

标签: java jframe jpanel

如何在Java中将图像加载到背景中?我尝试了很多不同的方法,但没有一个工作,所以我问是否有人知道如何将png图像上传到jpannel

2 个答案:

答案 0 :(得分:0)

制作自己的JPanel。在GUI的构造函数中添加PicPanel的对象。

class PicPanel extends JPanel{

    private BufferedImage image;
    private int w,h;
    public PicPanel(String fname){ //Pass picture's filename as a parameter.

        //reads the image
        try {
            image = ImageIO.read(getClass().getResource("/"+fname));
            w = image.getWidth();
            h = image.getHeight();

        } catch (IOException ioe) {
            System.out.println("Could not read in the pic");
            //System.exit(0);
        }

    }

    public Dimension getPreferredSize() {
        return new Dimension(w,h);
    }
    //this will draw the image
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        g.drawImage(image,0,0,this);
    }
}

答案 1 :(得分:0)

可以通过多种方式实现这一目标。

你可以......

创建JLabel,将图像应用于其icon属性,并将其设置为框架内容窗格。然后,您需要适当地设置布局管理器,因为JLabel没有默认的布局管理器

JFrame frame = ...;
JLabel background = new JLabel(new ImageIcon(ImageIO.read(...)));
frame.setContentPane(background);
frame.setLayout(...);
frame.add(...);

问题是JLabel在调整帧大小时不会调整图像大小

你可以......

创建一个自定义组件,从JPanel扩展并覆盖它的paintComponent方法,根据需要绘制背景。

这使您能够决定在可用空间更改时图像的最佳缩放比例。虽然有许多方法可以实现,但您应该阅读The Perils of Image.getScaledInstance()以了解它们的优缺点。

这引发了一系列新问题,你想要缩放它们并保持纵横比吗?如果是这样,您是否希望将图像适合可用区域或填充它(因此它将始终覆盖可用空间)?

请查看Java: maintaining aspect ratio of JPanel background image了解详情。

其他注意事项

图像通常最好通过ImageIO API加载,因为它能够加载各种图像,但在出现问题时也会抛出IOException

有关详细信息,请参阅Reading/Loading an Image

图像的位置也很重要。如果映像在应用程序外部(文件系统的某个位置),则可以使用ImageIO.read(new File("/path/to/image"))。但是,如果图像嵌入在您的应用程序中(例如存储在Jar中),则需要使用更像ImageIO.read(getClass().getResource("/path/to/image"))的内容...