Java经典小项目——二维码(2)信息存入二维码中

目录

文本信息转化

代码实现

步骤

1.创建界面

2.字符串信息存入数组中

3.绘制二维码 

 完整代码

 总结

文本信息转化

       上篇文章我们已经讲到,在计算机中有一些信息交换代码,也可以理解为一种协议,常见的就是ASCII码和Unicode协议,而在计算机底层中,存储的只有二进制信息,一切形式的信息都会转化为二进制信息,今天的代码我们的任务就是将一段字符信息存入二维码中。

代码实现

步骤

1.创建界面

       首先创建要能呈现出二维码的界面,同时,创建一个数组:String[] codeArr;用来存储字符信息,便于后面直接使用数组来绘制二维码。

class CodeUI01 extends JFrame {
    String[] codeArr;
    CodeUI01(String[] codeArr){
        this.codeArr=codeArr;
        this.setSize(600,600);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }

2.字符串信息存入数组中

       选择在主函数中将字符串信息存入数组,便于后面绘制。这里我们提前选择补满9位二进制位,将二进制数字前面补0的目的是确保每个二进制码都具有相同的位数,方便后续在图形界面中以矩形的形式展示。

        使用Interger.toBinaryString(d)方法将字符转换为对应的二进制码。但是,这个方法返回的是不含前导零的二进制字符串。为了保证每个二进制码都具有相同的位数,需要将长度不足8位的二进制码进行补零操作。

         通过在二进制码的前面添加0,可以保证每个二进制码都具有相同的长度,从而在图形界面中以矩形的形式进行展示时,每个矩形的大小都是一样的。这样可以确保整个二维矩阵的形状正确,不会出现因为二进制码长度不一致而导致矩形显示错位或大小不一致的问题。

public static void main(String[] args){
        String str="/javascript/ /mysql/ /python//code/";
        String[] codeArr=new String[str.length()];
        //把每个字符取出
        for(int i=0;i<str.length();i++){
            char d=str.charAt(i);
            System.out.print(d+"-"+(int)d);
            //用integer.toBingaryString()把对应的数字转换成二进制码
            String binStr=Integer.toBinaryString(d);
            System.out.print("  "+binStr);
            //把每个二进制串,补上八位,前面补0
            while(binStr.length()<=8){
                binStr='0'+binStr;
            }
            System.out.println(" "+binStr);
            //存储这些数据
            codeArr[i]=binStr;
        }
        new CodeUI01(codeArr);
    }

3.绘制二维码 

       JFrame类是javax.swing.JFrame的父类,它提供了一些基本的功能和方法用于创建和管理图形界面窗口。其中就包括了paint方法。在JFrame类中,paint方法是一个用于绘制组件的图形表示的方法。当需要在窗口上进行绘图时,可以重写paint方法,在方法中编写绘图的逻辑。重写paint方法后,可以通过调用super.paint(g)来执行父类的绘图逻辑,然后再添加自定义的绘图逻辑。

       在这段代码中,通过继承JFrame类,并重写paint方法,在CodeUI01类中实现了自定义的绘图逻辑,用于将二进制码以矩形的形式绘制在窗口上。

       在paint方法中,通过循环遍历codeArr数组中的二进制码。对于每个二进制码,将其转换为字符数组chars,以便逐个检查每个二进制位的值。对于每个二进制位,如果它的值是0,则将当前绘图环境的颜色设置为白色(Color.WHITE),否则设置为黑色(Color.BLACK)。

       使用Graphics对象的fillRect方法绘制一个矩形,矩形的位置和大小由计算得出:横坐标为100 + i * 10,纵坐标为100 + j * 10,宽度为高度为10每个字符的信息纵向。这就是每个模块的代码实现,完整代码我放在文章最后。

@Override
    public void paint(Graphics g){
        super.paint(g);
        for(int i=0;i<codeArr.length;i++){
            char[] chars=codeArr[i].toCharArray();
            for(int j=0;j<chars.length;j++){
                if(chars[j]=='0'){
                    g.setColor(Color.WHITE);
                } else{
                    g.setColor(Color.BLACK);
                }
                g.fillRect(100+i*10,100+j*10,10,10);
            }
        }
        g.setColor(Color.BLUE);
        g.drawRect(99,99,codeArr.length*10+2,codeArr[0].length()*10+2);
    }


 完整代码

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

public class Code {
    public static void main(String[] args){
        String str="/javascript/ /mysql//code/";
        String[] codeArr=new String[str.length()];
        //把每个字符取出
        for(int i=0;i<str.length();i++){
            char d=str.charAt(i);
            System.out.print(d+"-"+(int)d);
            //用integer.toBingaryString()把对应的数字转换成二进制码
            String binStr=Integer.toBinaryString(d);
            System.out.print("  "+binStr);
            //把每个二进制串,补上八位,前面补0
            while(binStr.length()<=8){
                binStr='0'+binStr;
            }
            System.out.println(" "+binStr);
            //存储这些数据
            codeArr[i]=binStr;
        }
        new CodeUI01(codeArr);
    }
}
class CodeUI01 extends JFrame {
    String[] codeArr;
    CodeUI01(String[] codeArr){
        this.codeArr=codeArr;
        this.setSize(600,600);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
    @Override
    public void paint(Graphics g){
        super.paint(g);
        for(int i=0;i<codeArr.length;i++){
            char[] chars=codeArr[i].toCharArray();
            for(int j=0;j<chars.length;j++){
                if(chars[j]=='0'){
                    g.setColor(Color.WHITE);
                } else{
                    g.setColor(Color.BLACK);
                }
                g.fillRect(100+i*10,100+j*10,10,10);
            }
        }
        g.setColor(Color.BLUE);
        g.drawRect(99,99,codeArr.length*10+2,codeArr[0].length()*10+2);
    }
}

 

 总结

       这段代码是一个简单的Java程序,用于将给定的字符串信息转换为二维码的图形表示并展示在图形界面上。它通过将字符串信息转换为二进制码,并将每个二进制码补足为8位的形式存储在数组中。

       然后,利用JFrame和Graphics类实现了一个简单的图形界面,使用矩形来表示二进制码的0和1,并根据二进制位的值设置矩形的颜色。通过重写paint方法,在窗口上绘制二维码的矩形表示,并添加外边框以突出显示二维码。这段代码通过将文本信息转换为可视化的二维矩阵形式,展示了简单的二维码生成和图形界面绘图的原理。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值