Java 如何将图像绘制到JPanel或JFrame?

Java 如何将图像绘制到JPanel或JFrame?,java,swing,jframe,jpanel,bufferedimage,Java,Swing,Jframe,Jpanel,Bufferedimage,如何在JPanel或JFrame上绘制图像,我已经阅读了oracle关于这方面的教程,但似乎无法正确理解。我需要图像“BeachRoad.png”显示在一组特定的坐标上。这是我到目前为止所拥有的 public class Level1 extends JFrame implements ActionListener { static JLayeredPane EverythingButPlayer; static Level1 l1; public Level1() { Every

如何在JPanel或JFrame上绘制图像,我已经阅读了oracle关于这方面的教程,但似乎无法正确理解。我需要图像“
BeachRoad.png
”显示在一组特定的坐标上。这是我到目前为止所拥有的

public class Level1  extends JFrame implements ActionListener {

static JLayeredPane EverythingButPlayer;
static Level1 l1;

public Level1() {
    EverythingButPlayer = new JLayeredPane();

    BufferedImage img = null;
    try {
        img = ImageIO.read(new File("BeachRoad.png"));
    } catch (IOException e) {
    }
    Graphics g = img.getGraphics();
    g.drawImage(img,0, 0, EverythingButPlayer);


    this.add(EverythingButPlayer);
}
总的来说()

l1=新级别1();
l1.设定所有权(“poop”);
l1.设置大小(1920、1080);
l1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
l1.设置可见(真);

提前谢谢

有很多方法,但我总是覆盖
JComponent的
paint(Graphics g)
,并使用
g.drawImage(…)

编辑:我正在制作一个样本,但丹尼尔·卡普兰做得很好,看看他的答案:)

试试这个:

package com.sandbox;

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

public class SwingSandbox {

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

        final BufferedImage image = ImageIO.read(new File("C:\\Projects\\MavenSandbox\\src\\main\\resources\\img.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;
    }


}

您的代码是解决问题的直接方法,或者是如何讨厌编程语言(whatever.getGraphics())1。若要阅读Oracle教程,请在此处搜索由
paintComponent
JLabel
标记为
Icon
/
ImageIcon
的帖子,我已在问题的第一部分中指出,我阅读了有关使用图像的Oracle教程。我真的不明白你说的第一件事……请看@tieTYT的答案,从paintComponent(忘记了paint())和JPanel开始,需要为JPanel重写getPreferredSize(忘记了JFrame.setSize()),然后调用JFrame.pack()(在这里搜索,关于绘制图像、形状和线条的一半问题)谢谢!这正是我想要的。我对在java中使用图像非常陌生,完全不懂。您能举个例子说明如何调用paintComponent方法吗?看起来应该是pane.paintComponent(),但我不知道g@redeagle47的参数是什么。这是个好问题,但不幸的是我不知道答案(或者我忘了)。这只是一份你承诺要执行的合同。如何获得
g
的详细信息来自Swing内部,而不是您编写的任何代码。Swing渲染
JPanel
,并在渲染时调用
paintComponent
。如果你重写这个方法,它会按照你的方式绘制,而不是默认的方式。哦,事实上,我正在阅读文档,我想我找到了答案。我认为pane.repaint()是正确的方法;它应该通过更高级别的容器调用paintComponent()。我不是100%认为这是正确的语法,但它是这样的。它实际上只是重新绘制()本身