首先,我想为任何错误道歉,我不会说英语,我是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。
我真的希望你可以帮助我,我完全厌倦了所有尝试找出问题所在。如果你能在答案中写出正确的代码并解释我做错了什么,那就太酷了。记住,我是这一切的新手。
非常感谢!
答案 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而不是将其放在屏幕上。我希望它在某种程度上有所帮助。