项目示范:
- 链接:https://pan.baidu.com/s/1RFIeMh5zJwT9tUQrYOO2hA
- 提取码:1111
-
使用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();
- }
- }
- }
-
使用 定时器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);
- }
-
- }
-