import javax.swing.*;
import java.awt.*;
public class DataMatrix {
static class DMCanvas extends Canvas {
private static final int size1 = 20;
private static final int size2 = 18;
private boolean[][] bits = new boolean[size2][size2];
public void setText(String text) {
if (text.length() > size2 * size2) {
throw new IllegalArgumentException();
}
bits = new boolean[size2][size2];
int i = 0;
for (char c : text.toCharArray()) {
if (c > 255) {
throw new IllegalArgumentException();
}
for (int j = 0; j < 8; j++) {
if ((c & 1) == 1) {
bits[i / size2][i % size2] = true;
}
c >>= 1;
i++;
}
}
}
private void set(int x, int y, boolean one, Graphics g) {
int w = this.getWidth();
int h = this.getHeight();
int max = Math.min(w, h) - 40;
int len = (int) Math.floor(max / 20.0);
if (one) {
g.fillRect(10 + x * len, 10 + y * len, len, len);
}
}
private void setBorders(Graphics g) {
for (int i = 0; i < size1; i++) {
set(i, 0, i % 2 == 0, g);
set(size1 - 1, i, i % 2 != 0, g);
set(0, i, true, g);
set(i, size1 - 1, true, g);
}
}
private void setDataMatrix(Graphics g) {
for (int y = 0; y < size2; y++) {
for (int x = 0; x < size2; x++) {
set(1 + x, 1 + y, bits[y][x], g);
}
}
}
@Override
public void paint(Graphics g) {
setBorders(g);
setDataMatrix(g);
}
}
public DataMatrix() {
DMCanvas can = new DMCanvas();
can.setText("Hallo Welt...");
JFrame frame = new JFrame("DataMatrixCode");
frame.add(can);
frame.setSize(425, 450);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String[] args) {
new DataMatrix();
}
}