Java - 如何获取要显示的图像?

Java - How do I get an image to display?

我花了很长时间试图找到一种在 Java 程序中显示图像的方法(我正在尝试学习如何制作 2D Java 游戏)一无所获我试过的作品。我正在使用 Eclipse Mars 和其他最新版本。这是我的代码:

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Main extends JFrame {

    public static void main(String[] args0) {

        JFrame frame = new JFrame();
        ImageIcon image = new ImageIcon("background.bmp");
        JLabel imageLabel = new JLabel(image);
        frame.add(imageLabel);
        frame.setLayout(null);
        imageLabel.setLocation(0, 0);
        imageLabel.setSize(1000, 750);
        imageLabel.setVisible(true);
        frame.setVisible(true);
        frame.setSize(1000, 750);
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);

    }

}

请告诉我如何更正代码以使图像实际显示。提前谢谢你。

(P.S。"background.bmp" 文件在 "default package" 中,如果有任何变化的话)

阅读 How to Use Icons 上的 Swing 教程部分。它们的示例向您展示了如何将图像作为资源加载。当您使用资源时,将搜索类路径以查找文件。

//frame.setLayout(null);
//imageLabel.setLocation(0, 0);
//imageLabel.setSize(1000, 750);

不要使用空布局并尝试设置标签的 size/location。让布局管理器完成它的工作。标签将是图像的大小。

//frame.setSize(1000, 750);
frame.pack();

不要使用 frame.setSize(...)。相反,您使用 frame.pack() 那么框架将是图像的大小加上框架边框和标题的大小。让 Swing 及其布局管理器为您完成这项工作。

后缀为.bmp 的图片无法在您的代码中显示。尝试修改

ImageIcon image = new ImageIcon("background.bmp");

ImageIcon image = new ImageIcon("background.png");

并将图像名称更改为 background.png。

但是,如果你只是想使用background.bmp,你需要像这样修改你的代码,背景图片才会显示。

import java.awt.Image;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Main extends JFrame {

    public static void main(String[] args0) {

        try {
            JFrame frame = new JFrame();
            File imageFile = new File("background.bmp");
            Image i = ImageIO.read(imageFile);
            ImageIcon image = new ImageIcon(i);
            JLabel imageLabel = new JLabel(image);
            frame.add(imageLabel);
            frame.setLayout(null);
            imageLabel.setLocation(0, 0);
            imageLabel.setSize(1000, 750);
            imageLabel.setVisible(true);
            frame.setVisible(true);
            frame.setSize(1000, 750);
            frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

新代码的效果如下:

希望对您有所帮助。

顺便说一句,我把图片放在了项目的根目录下。

作为一个初学者,我发现你画的图很容易看出来:

源代码

public class CheckCodeTest  {

    private int width = 100, height = 50;
    private BufferedImage image = new BufferedImage(width, height,
                                      BufferedImage.TYPE_INT_RGB);

    @Test
    public void drawGraphicsTest() throws IOException {

        Graphics graphics = image.createGraphics();

        // draw an orange rectangle
        graphics.setColor(Color.orange);
        graphics.fillRect(0,0,width,height);

        // layout the picture right now!
        graphics.drawImage(image,0,0,null);
        ImageIO.write(image, "png", new File("checkcode.png"));
    }
}

输出

它会在您的项目内容下生成一个图片文件。

output-picture

然后就可以看到小window中添加draw代码后有什么变化了,比关闭一个跳出的Frame/Label方便多了window:

output-picture-in-editor