Java ImageIcon大小

sut*_*toL 15 java swing

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

反正有没有让它自动调整大小到标签大小?

下面是Upload Picture 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());
Run Code Online (Sandbox Code Playgroud)

coo*_*ird 25

给定示例代码,一种方法是调整图像大小以在调用方法JLabel之前显示setIcon.

一种方法是更改actionPerformed方法,因此将使用ImageIO.read方法读取图像,然后在ImageIcon创建之前调整图像大小,从指定文件加载图像.

Image img = ImageIO.read(fc.getSelectedFile());
Run Code Online (Sandbox Code Playgroud)

然后,所加载的图像可以调整到的尺寸JLabel使用,Image.getScaledInstance.

Image resizedImage = 
    img.getScaledInstance(lblDisPic.getWidth(), lblDisPic.getHeight(), null);
Run Code Online (Sandbox Code Playgroud)

现在,人们可以创建一个ImageIcon用于JLabel.

lblDisPic.setIcon(new ImageIcon(resizedImage));
Run Code Online (Sandbox Code Playgroud)

这种方法的局限性在于,如果JLabel以任何方式调整大小,则JLabel不会调整包含的图像的大小.然而,由于JLabel将使用原件的缩小图像,这意味着所需的内存量将减少(如果担心)并且每次显示图像时都不必调整原始图像的大小,就像重写paintComponent方法一样.

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

  • 我相信null应该替换为Image.SCALE_FAST(或其任何枚举​​变体). (7认同)

Poo*_*ool 5

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

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

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

来自这里.

编辑

要添加到您的代码更改:

lblDisPic = new JLabel();
Run Code Online (Sandbox Code Playgroud)

至:

lblDidPic = new JLabel() {

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