Java ImageIcon size

2022-09-03 04:21:51

我已经将一张图片上传到我的GUI中,该图片显示在JLabel上。标签尺寸仅设置为100,100,而图片要大得多,因此当我将其上传到标签中时,它会扩展。

是否无论如何都可以使其自动调整为标签大小?

下面是上传图片JButton的动作监听器

class UploadHandler implements ActionListener 
{
    public void actionPerformed(ActionEvent e)
    {
        int returnVal = fc.showOpenDialog(frame2);
        file = fc.getSelectedFile();
        pathname = file.getPath();
        icon = new ImageIcon(pathname);
        lblDisPic.setIcon(icon);    
    }
}

btnUpload = new JButton("Upload Picture");
lblDisPic = new JLabel();
lblDisPic.setBorder(raisedetched);
lblDisPic.setPreferredSize(d); 

btnUpload.addActionListener(new UploadHandler());

答案 1

给定示例代码,一种方法是在调用方法之前调整图像的大小以显示在上面。JLabelsetIcon

一种方法是更改方法,以便从指定文件加载图像,使用 ImageIO.read 方法读取图像,然后在创建 之前调整图像大小。actionPerformedImageIcon

Image img = ImageIO.read(fc.getSelectedFile());

然后,可以使用 Image.getScaledInstance 将加载的图像大小调整为 的尺寸。JLabel

Image resizedImage = 
    img.getScaledInstance(lblDisPic.getWidth(), lblDisPic.getHeight(), null);

现在,可以在 .ImageIconJLabel

lblDisPic.setIcon(new ImageIcon(resizedImage));

此方法的限制是,如果以任何方式调整其大小,则不会调整 其包含的图像的大小。但是,由于将使用原始图像的缩小图像,这意味着所需的内存量将减少(如果这是一个问题),并且每次显示图像时都不必调整原始图像的大小,就像覆盖该方法一样。JLabelJLabelJLabelpaintComponent

实现手头任务的首选方法将取决于以后是否需要原始图像的要求。


答案 2

当然,只需覆盖该方法,您就可以根据需要缩放和绘制它。paintComponent

myLabel = new JLabel (/*whatever*/) {

    @Override
    public void paintComponent (Graphics g) {
        super.paintComponent (g);
        g.drawImage (myImageIcon.getImage(), 0, 0, getWidth (), getHeight (), null);
    }
};

来源从这里。

编辑

要添加到代码更改中:

lblDisPic = new JLabel();

自:

lblDidPic = new JLabel() {

    @Override
    public void paintComponent (Graphics g) {
        super.paintComponent (g);
        if (icon != null) {
            g.drawImage (icon.getImage(), 0, 0, getWidth(), getHeight(), null);
        }
    }
};

推荐