无法将图像绘制到JFrame

时间:2015-02-01 11:22:14

标签: java eclipse image swing jframe

首先,我想为任何错误道歉,我不会说英语,我是Java的新手,我是Stackoverflow的新手。请善待!

我一直未能将简单的图像绘制到屏幕上。我尝试了一切,但我一直都在失败,而且我越来越困惑。这是我的源代码:

package com.Animation;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import java.awt.Graphics2D;
import java.awt.Point;
import javax.imageio.ImageIO;
import javax.swing.JFrame;

@SuppressWarnings("serial")

public class Class1 extends JFrame{

private BufferedImage backgroundImg;

public Class1(){
    this.setTitle("Animation");
    this.setSize(1080, 720);
    this.setLocationRelativeTo(null);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setVisible(true);
    LoadContent();
    }


public static void main(String[] args){
    new Class1();
}

private void LoadContent()
{
    try
    {
        URL backgroundImgUrl = this.getClass().getResource("Back.jpg");
        backgroundImg = ImageIO.read(backgroundImgUrl);
    }
    catch (IOException ex) {
        System.err.println("Fehler!");
    }
}

public void Draw(Graphics2D g2d)
{
    g2d.drawImage(backgroundImg, 0, 0, null);
}

}

所以会发生的是,JFrame窗口打开时无法看到它。我认为这是因为Draw()方法没有被调用。但是当我添加“Draw(g2d);”时在某个地方,我不断收到NullPointerException。图片“Back.jpg”与班级位于同一个包装中。我正在使用eClipse和JRE JavaSE 1.7。

我真的希望你可以帮助我,我完全厌倦了所有尝试找出问题所在。如果你能在答案中写出正确的代码并解释我做错了什么,那就太酷了。记住,我是这一切的新手。

非常感谢!

3 个答案:

答案 0 :(得分:4)

有很多方法可以做到这一点。实例

1)JLabel。 //不推荐
JLabel中添加JFrame,然后执行label.setIcon(backgroundImg);

2)JPanel
覆盖paint()中的JPanel方法(请确保已将其添加到JFrame)。

@Override
public void paintComponent(Graphics g)
{
    super.paintComponent(g);
    g.drawImage(backgroundImg, 0, 0, this); 
}

答案 1 :(得分:3)

试试这个。在这里,我将图像设置为JPanel,而不是直接将其设置为JFrame。

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

/**
 *
 * @author Rumesh
 */
public class Test extends JFrame{

    public static void main(String[] args) throws IOException {
        JFrame frame = buildFrame();

        final BufferedImage image = ImageIO.read(new File("1.jpg"));

        JPanel pane = new JPanel() {
            @Override
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
                g.drawImage(image, 0, 0, null);
            }
        };


        frame.add(pane);
    }


    private static JFrame buildFrame() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setSize(200, 200);
        frame.setVisible(true);
        return frame;
    }

}

答案 2 :(得分:0)

我不知道这是否是您要搜索的内容:

ImageIcon image = new ImageIcon("src/media/Image.jpg");
JLabel lblImg = new JLabel("", image, JLabel.CENTER);
lblImg.setBounds(..., ..., ..., ...);
add(lblImg);

这样您就可以将图像添加到JLabel而不是将其放在屏幕上。我希望它在某种程度上有所帮助。