二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。
          二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化点。
         2016年8月3日,支付清算协会向支付机构下发《条码支付业务规范》(征求意见稿),意见稿中明确指出支付机构开展条码业务需要遵循的安全标准。这是央行在2014年叫停二维码支付以后首次官方承认二维码支付地位。
          本文中,作者采用的是QRCode.jar来生成和解析二维码。
  项目的目录结构:
4ABGSMNS@FRHDRWCH.png
视图层代码如下:
` package com.njsxit.qr.view; import com.njsxit.qr.util.QRCodeUtil; import javax.swing.*; import javax.swing.filechooser.FileSystemView; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * @Author DogJay */ public class MainFrame extends JFrame { private JFrame mainFrame; private JTextField jtextField; private JButton jbutton; private JPanel southPanel; private JPanel imgPanel = new JPanel(); private JLabel infoLabel = new JLabel("提示信息:默认图片存放路径为桌面"); private JLabel successLabel; private JFileChooser jFileChooser = new JFileChooser(); private JLabel ImgLabel = new JLabel(); private Image image; FileSystemView fileSystemView = FileSystemView.getFileSystemView(); private JLabel jLabel = new JLabel("解析内容:"); /** * 初始化各项组件 */ public void init() { /*创建一个窗体*/ mainFrame = new JFrame(); mainFrame.setTitle("二维码生成器"); /*设置窗体布局*/ mainFrame.getContentPane().setLayout(new BorderLayout()); /*创建面板*/ southPanel = new JPanel(); southPanel.add(jLabel); /*创建input输入框*/ jtextField = new JTextField(); jtextField.setColumns(15); /*在面板上面添加输入框*/ southPanel.add(jtextField); /*设置系统桌面路径为默认路径*/ // jFileChooser.setCurrentDirectory(fileSystemView.getHomeDirectory()); jbutton = new JButton("点我生成"); Toolkit toolkit = Toolkit.getDefaultToolkit(); Dimension screenSizer = toolkit.getScreenSize(); int screenWidth = screenSizer.width; int screenHeight = screenSizer.height; /*设置窗体大小*/ mainFrame.setSize(screenWidth/4-10,screenHeight/3); infoLabel.setSize(screenWidth/4-10,0); imgPanel.add(ImgLabel); successLabel = new JLabel(); /*给按钮添加监听事件*/ jbutton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { /*获取输入框文字*/ String name = jtextField.getText(); String imgname = name+".png"; String imgpath = fileSystemView.getHomeDirectory().getPath()+"\\"+imgname; /*生成二维码*/ QRCodeUtil.encoderQRCode(name,imgpath,"png"); // image = new ImageIcon(imgpath).getImage(); ImgLabel.setIcon(new ImageIcon(imgpath)); try { JlabelSetText(infoLabel,"二维码生成成功,图片路径为"+imgpath); } catch (InterruptedException e1) { e1.printStackTrace(); } // JOptionPane.showMessageDialog(mainFrame,"二维码生成成功,图片路径为"+imgpath,"提示信息",JOptionPane.INFORMATION_MESSAGE); } }); southPanel.add(jbutton); /*将面板添加到窗体的北边*/ mainFrame.add(southPanel,BorderLayout.NORTH); /*将图形窗体添加到窗体的南边*/ mainFrame.add(imgPanel,BorderLayout.CENTER); /*将提示信息放在窗体的最南边*/ mainFrame.add(infoLabel,BorderLayout.SOUTH); /*设置窗体位置——居中*/ mainFrame.setLocationRelativeTo(null); /*设置窗体关闭事件*/ mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /*设置窗体大小不可改变*/ mainFrame.setResizable(false); /*设置窗体可见*/ mainFrame.setVisible(true); } public MainFrame() { init(); } /** * 设置Label换行 * @Author DogJay * @param jLabel * @param longString * @throws InterruptedException */ public void JlabelSetText(JLabel jLabel, String longString) throws InterruptedException { StringBuilder builder = new StringBuilder(""); char[] chars = longString.toCharArray(); FontMetrics fontMetrics = jLabel.getFontMetrics(jLabel.getFont()); int start = 0; int len = 0; while (start + len < longString.length()) { while (true) { len++; if (start + len > longString.length()) break; if (fontMetrics.charsWidth(chars, start, len) > jLabel.getWidth()) { break; } } builder.append(chars, start, len-1).append("
"); start = start + len - 1; len = 0; } builder.append(chars, start, longString.length()-start); builder.append(""); jLabel.setText(builder.toString()); } }

实体类代码:

package com.njsxit.qr.entity; import java.awt.image.BufferedImage; import jp.sourceforge.qrcode.data.QRCodeImage; public class QRImage implements QRCodeImage { BufferedImage bufImg; public QRImage(BufferedImage bufImg) { this.bufImg = bufImg; } public int getHeight() { return bufImg.getHeight(); } public int getPixel(int x, int y) { return bufImg.getRGB(x, y); } public int getWidth() { return bufImg.getWidth(); } } 剩下的就不一一介绍的,具体代码见附件 QRjars
[1]: https://i-blog.csdnimg.cn/blog_migrate/a03e7781b295ad489d6b1cbf683e42cc.png