将图像大小调整为从 Swing 应用程序中的文件选择器动态获取的 JLabel 的大小

Resize image to the size of JLabel taken dynamically from file chooser in Swing app

我正在通过文件选择器动态上传图片,但图片不适合 JLabel 的大小。如何解决?

public void image()
{

       fileChooser.setCurrentDirectory(new File("."));
fileChooser.setFileFilter(new javax.swing.filechooser.FileFilter() {
                @Override
                    public boolean accept(File f) {
      return f.getName().toLowerCase().endsWith(".jpg")|| f.isDirectory();                       
                    }
                @Override
                    public String getDescription() {
                        return "JPG Images";
                    }
                });
                int r = fileChooser.showOpenDialog(new JFrame());
                ImageIcon ico=new ImageIcon(fileChooser.getSelectedFile().getAbsolutePath());
                UpImage.setIcon(ico);
                file = fileChooser.getSelectedFile();

        try {
            fis = new FileInputStream(file);
        } catch (FileNotFoundException ex) {
    Logger.getLogger(EntryEmp.class.getName()).log(Level.SEVERE, null, ex);
        }
}

ImageIcon scaledImageIcon = new ImageIcon(icon.getImage().getScaledInstance(width, height, java.awt.Image.SCALE_SMOOTH));

用你的 JFileChooser 抓住图像,如下所示:

BufferedImage image = ImageIO.read(fileChooser.getSelectedFile());  

现在计算 JLabel 的宽度和高度,并将其发送到方法 resizeImage(BufferedImage image, int width, int height)resizeImage 方法编码如下。

// This method resizes the BufferedImage to specified width and height.
// Returns an ImageIcon object.
private ImageIcon resizeImage(BufferedImage image, int width, int height) {

    // image - BufferedImage object of your file selected
    // width - Width of your JLabel
    // height - Height of yout JLabel

    // Creating a temporary Image of your desired size.
    BufferedImage tempImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
    Graphics2D gr = tempImg.createGraphics();

    g.drawImage(image, 0, 0, width, height, null); // Draw the selected image on the tempImage from co-ordinates (0, 0) to (width, height) of the tempImage.
    g.dispose();  // Clear resources.

    return new ImageIcon(tempImage);
}  

就是这样。现在您所要做的就是:

label.setIcon(image);  

希望对您有所帮助:)

but the image doesn't fit the size of the jlabel.

您可以使用 Darryl 的 Stretch Icon

您可以让图像自动缩放以填充标签可用的 space。或者您可以使用比例缩放来保持图像的原始 x/y 比例。