如何将图像添加到JPanel

时间:2013-08-22 13:40:37

标签: java image swing jframe jpanel

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

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

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

3 个答案:

答案 0 :(得分:4)

为什么不使用JLabel呢?

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

答案 1 :(得分: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){}

答案 2 :(得分:2)

要在面板中显示图像,请覆盖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,两者),通常最好为此创建一个专门的图像面板类。