在JLabel中显示图片

编写一个界面,包括1个按钮和1个JLabel控件,当点击按钮时,将从D盘读取图片cat.jpg,显示在JLabel控件中。
要求:对图片不存在,读取失败等情况做处理

只能写出来显示文字,不知道咋显示图片


package lecture25_2;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

class FrameDemo extends JFrame implements ActionListener {
    JLabel label1;
    JButton btn1;

    public FrameDemo(String title) {
        super(title);
        btn1 = new JButton("显示图片");
        label1 = new JLabel();
        add(label1);
        add(btn1);
        btn1.addActionListener(this);
        setLayout(new FlowLayout());
        setSize(400, 200);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == btn1) {
            label1.setText("1234");
        }
        // TODO Auto-generated method stub

    }

}

public class Test {
    public static void main(String[] args) {
        try {
            FileInputStream in = new FileInputStream("F:\\test.jpg");
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        FrameDemo frame = new FrameDemo("显示图片");

    }

}


这是一份使用 Java 实现此需求的代码:


```java


import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class ImageDisplay {
    private JFrame frame;
    private JLabel label;

    public ImageDisplay() {
        frame = new JFrame("图片显示");
        label = new JLabel();
        JButton button = new JButton("读取图片");

        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                File file = new File("D:/cat.jpg");
                if (!file.exists()) {
                    label.setText("文件不存在");
                } else {
                    try {
                        ImageIcon icon = new ImageIcon(ImageIO.read(file));
                        label.setIcon(icon);
                    } catch (IOException e1) {
                        label.setText("读取失败");
                    }
                }
            }
        });

        frame.add(button, BorderLayout.NORTH);
        frame.add(label, BorderLayout.CENTER);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 500);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new ImageDisplay();
    }
}


```
说明:

使用 ImageIO.read 方法读取图片。
使用 ImageIcon 将图片包装为一个图标,以便于在 JLabel 中显示。
在读取图片前检查文件是否存在,若不存在,则显示“文件不存在”。
若读取图片过程中发生异常,则显示“读取失败”。
  • 一个利用JLabel自带的setIcon(Icon icon)加载icon,只能小图片;
  • 另外就是 重载JPanel的paintComponent(Graphics g)方法

参考如下:

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^