Java 如何将图像添加到JPanel

Java 如何将图像添加到JPanel,java,image,swing,jframe,jpanel,Java,Image,Swing,Jframe,Jpanel,我正在尝试向JPanel中的面板显示jpeg图像。我有两个面板,面板1。我试图在一个面板中显示图像,然后移除面板以显示另一个 panel.g2d.drawImage(myimage, 0, 0, null); 它给了我大约50个错误,我不能全部输入,因为我在我的手机上写这个,因为我现在没有互联网 为什么不直接使用JLabel呢 将缓冲图像与JPanel一起使用。这里有一个例子 try{ BufferedImage myPicture = ImageIO.read

我正在尝试向JPanel中的面板显示jpeg图像。我有两个面板,面板1。我试图在一个面板中显示图像,然后移除面板以显示另一个

       panel.g2d.drawImage(myimage, 0, 0, null);
它给了我大约50个错误,我不能全部输入,因为我在我的手机上写这个,因为我现在没有互联网

为什么不直接使用JLabel呢


将缓冲图像与JPanel一起使用。这里有一个例子

try{

        BufferedImage myPicture = ImageIO.read(new File("c://pic.jpg"));

        picLabel = new JLabel(new ImageIcon(myPicture));
        picLabel.setHorizontalAlignment(SwingConstants.CENTER);
                    frame.getContentPane().add(picLabel);

        }catch (IOException e){}

要在面板中显示图像,请替代paintComponentGraphics方法并在其中绘制图像:

public class ImagePanel extends JPanel {

    private Image image;

    public void setImage (Image image) {
        this.image = image;
        revalidate();
        repaint();
    }


    @Override
    protected void paintComponent (Graphics g) {
        super.paintComponent(g);
        if (image != null)
            g.drawImage(image, 0, 0, this);
    }
}
您还应该重写getPreferredSize方法,以公开父容器的布局管理器将使用的图像组件的大小:

@Override
public Dimension getPreferredSize () {
    if (image == null) {
        return super.getPreferredSize();
    }
    Insets insets = getInsets();
    return new Dimension(image.getWidth(this) + insets.left + insets.right, image.getHeight(this) + insets.top + insets.bottom);
}

编辑:正如其他答案所指出的那样,JLabel可以显示简单的图像或图标,但是当您需要高级功能时,例如自动上/下缩放(有或没有保持比例)、平铺x和y,这两者都可以,通常最好为此创建一个专门的图像面板类。

因为我现在没有互联网,你是如何在这里写这个问题的?在电话上发了这个问题,@BackSlash。请查看这个答案,了解如何操作,但如果你不使用任何IDE手动操作,那么这肯定会对你有所帮助:--1这个完全相同的问题已经被问了至少一百万次了,至少感觉是这样的-做一些研究,评估不同的选择,如果你遇到麻烦就回来-vote@MadProgrammer:完成:
@Override
public Dimension getPreferredSize () {
    if (image == null) {
        return super.getPreferredSize();
    }
    Insets insets = getInsets();
    return new Dimension(image.getWidth(this) + insets.left + insets.right, image.getHeight(this) + insets.top + insets.bottom);
}