如何将图像添加到JPanel?

2022-08-31 04:48:07

我有一个JPanel,我想添加我动态生成的JPEG和PNG图像。

到目前为止,我在 Swing 教程中看到的所有示例,特别是在 Swing 示例中都使用 s。ImageIcon

我将这些图像生成为字节数组,它们通常大于示例中使用的常见图标,即640x480。

  1. 使用 ImageIcon 类在 JPanel 中显示大小相同的图像时是否存在任何(性能或其他)问题?
  2. 通常的方法是什么?
  3. 如何在不使用 ImageIcon 类的情况下将映像添加到 JPanel?

编辑:对教程和API的更仔细的检查表明,您无法将ImageIcon直接添加到JPanel中。相反,它们通过将图像设置为 JLabel 的图标来实现相同的效果。这感觉不对劲...


答案 1

如果您使用的是JPanels,那么可能正在使用Swing。试试这个:

BufferedImage myPicture = ImageIO.read(new File("path-to-file"));
JLabel picLabel = new JLabel(new ImageIcon(myPicture));
add(picLabel);

该图像现在是一个摆动组件。与任何其他组件一样,它受布局条件的约束。


答案 2

以下是我的做法(有关如何加载图像的更多信息):

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.JPanel;

public class ImagePanel extends JPanel{

    private BufferedImage image;

    public ImagePanel() {
       try {                
          image = ImageIO.read(new File("image name and path"));
       } catch (IOException ex) {
            // handle exception...
       }
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(image, 0, 0, this); // see javadoc for more info on the parameters            
    }

}

推荐