ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-05-03 21:34:06  阅读:210  来源: 互联网

标签:java String void zxing 二维码 import public 加载


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);
    }

}

标签:java,String,void,zxing,二维码,import,public,加载
来源: https://blog.csdn.net/qq_43464558/article/details/116380846

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有