java 创建二维码 并加载显示到窗口


项目示范:
链接:https://pan.baidu.com/s/1RFIeMh5zJwT9tUQrYOO2hA 
提取码:1111 
1、创建二维码

使用zxing包创建二维码

maven依赖:

<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>javase</artifactId>
    <version>3.3.3</version>
</dependency>

代码:

import com.google.zxing.BarcodeFormat;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import java.nio.file.Path;

public class QrcodeUtils {
    /**
     *生成二维码方法
     * @param content 内容
     * @param file  路径
     */
    public static void createQrcode(String content, Path file) throws Exception {
        try {
            QRCodeWriter qrCodeWriter = new QRCodeWriter();
            BitMatrix bm = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, 400, 400);
            MatrixToImageWriter.writeToPath(bm, "png", file);
        } catch (WriterException e) {
            e.getStackTrace();
        }
    }
}
2、使用AWT加载显示

使用 定时器Timer实现了swing窗口的标题每秒更新一次,时间使用完后显示二维码的窗口关闭,并将创建的二维码删除

import javax.swing.*;
import java.awt.*;
import java.util.Timer;
import java.util.TimerTask;

public class QRCodeFrame extends JFrame {

    private Timer updateTitleTimer = new Timer();
    private Integer time = 180;
    private String qrcode;

    //外部调用这个函数加载窗口,显示二维码
    public void launchFrame(String qrcode) {
        this.qrcode = qrcode;
        updateFrameTitle();
        this.setVisible(true);
        this.setSize(420, 440);//大小
        this.setLocation(100, 100);//左上角位置
        //指定要从本地加载的二维码的路径
        JPanel jPanel = new QRCodeFrameImage(this.qrcode);
        this.getContentPane().add(jPanel);
        //设置始终在窗体层最上面
        this.setAlwaysOnTop(true);
    }

    public void closeWindows(){
    	//setVisible方法仅仅隐藏窗体,而dispose方法是关闭窗体,并释放一部分资源。
        this.dispose();
        if(null != updateTitleTimer){
            updateTitleTimer.cancel();
            updateTitleTimer=null;
        }
    }

    private void updateFrameTitle(){
        if(null == updateTitleTimer){
            return;
        }
        //定时器中发布任务,每1000ms执行一次,执行后递归调用自己
        updateTitleTimer.schedule(new TimerTask() {
            public void run() {
                time--;
                if(time<1){
                    //关闭窗口
                    closeWindows();
                    //将创建的二维码删除
                    deleteFile(qrcode);
                }
                setTitle(String.format("请使用微信扫描二维码,%s秒后自动关闭",time));
                updateFrameTitle();
            }
        }, 1000);
    }
    
    public void deleteFile(String filePath){
        File file = new File(filePath);
        if(file.exists()){
            file.delete();
        }
    }

    public int getTime() {
        return time;
    }

}

Panel 绘制二维码到窗体

import javax.swing.*;
import java.awt.*;

public class QRCodeFrameImage extends JPanel {
    private String imagePath;

    public QRCodeFrameImage(String imagePath) {
        this.imagePath = imagePath;
    }

    public void paint(Graphics g) {
        super.paint(g);
        ImageIcon icon = new ImageIcon(imagePath);
        g.drawImage(icon.getImage(), 0, 0, 400, 400, this);
    }

}
3、运行结果

在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当生成二维码后,可以将其转换为图片格式保存在数据库中。在前端页面中,可以使用<img>标签来显示图片,将数据库中的图片数据转换为base64格式,然后将其作为src属性值即可。具体实现方式可以参考如下代码: ```java // 生成二维码 String content = "hello world"; int width = 200; // 图片宽度 int height = 200; // 图片高度 String format = "png"; // 图片格式 Hashtable hints = new Hashtable(); hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints); // 保存二维码图片到数据库(假设使用MySQL) try { Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456"); String sql = "insert into qrcode (content, image) values (?, ?)"; PreparedStatement ps = conn.prepareStatement(sql); ps.setString(1, content); ByteArrayOutputStream baos = new ByteArrayOutputStream(); MatrixToImageWriter.writeToStream(bitMatrix, format, baos); byte[] imageBytes = baos.toByteArray(); ps.setBytes(2, imageBytes); ps.executeUpdate(); ps.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } ``` 在前端页面中,可以使用如下代码来显示数据库中保存的二维码图片: ```html <img src="data:image/png;base64,${base64EncodedImage}"> ``` 其中,${base64EncodedImage}是在后台将数据库中保存的二维码图片数据转换为base64格式后传递到前端的变量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值