如何将图像添加到 JPanel [重复]

Posted

技术标签:

【中文标题】如何将图像添加到 JPanel [重复]【英文标题】:How do you add an image to a JPanel [duplicate] 【发布时间】:2013-08-25 06:48:21 【问题描述】:

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

       panel.g2d.drawImage(myimage, 0, 0, null);

它给了我大约 50 个错误,我无法全部输入,因为我正在手机上写这个,因为我现在没有互联网。

【问题讨论】:

因为我现在没有网络你是怎么写这个问题的? 发布在手机上,@BackSlash。 请查看此答案以了解如何使用 load an image,但如果您手动操作(不使用任何 IDE),那么此 answer 肯定会帮助您:-) -1 这个完全相同的问题已经被问了至少一百万次(至少感觉是这样) - 做一些研究,评估不同的选项,如果遇到麻烦再回来。 【参考方案1】:

要在面板中显示图像,请覆盖paintComponent(Graphics) 方法并将其绘制到那里:

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,两者),通常最好为此创建一个专门的图像面板类。

【讨论】:

添加super.paintComponent添加我会给你一个赞成票 @MadProgrammer:完成:)【参考方案2】:

为什么不直接使用JLabel

Image image = ImageIO.read(getClass().getResource("/images/MyImage.png"));
JLabel label = new JLabel(new ImageIcon(image));
panel.add(label);

【讨论】:

【参考方案3】:

在 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)

【讨论】:

以上是关于如何将图像添加到 JPanel [重复]的主要内容,如果未能解决你的问题,请参考以下文章

我如何将JPanel分成70%30%[重复]

如何将图像添加到类并保存在数据库中[重复]

如何将两个 JPanel 添加到中心的 JFrame?

将图像设置为 JPanel 背景的最简单方法

将图像添加到画布 [重复]

如何关闭扩展JPanel的类[重复]