Barcodegenerator

Mit diesem Programm können Barcodes erstellt werden, die anschließend von normalen Handscannern lesbar sind. Dabei kann vom Benutzer eine Zeichenfolge und die Größe des zu erstellenden Barcodes eingegeben werden. Das Programm generiert ein entsprechendes Bild und zeigt es an.

Lösungsansatz

Das Problem lässt sich nach dem EVA-Prinzip in Eingabe, Verarbeitung und Ausgabe gliedern. Ersteres und letzteres wird in einem GUI-Programm zusammengefasst. Für die Verarbeitung wird eine weitere Klasse benötigt, die einem zu einer Zeichenkette das entsprechende Strichcode-Bild generiert.
Ein Zeichen wird in einem Barcode mit einer Folge von elf Linien dargestellt. Diese können entweder schwarz, oder weiß sein. Ganz zu Beginn des Barcodes gibt es eine Start-Zeichenfolge, am Ende eine Prüfziffer, die sich aus den benutzten Zeichen ergibt und Fehler beim Lesen verhindern soll.

Realisierung

Es werden zwei Java-Klassen benötigt: Die erste (BarcodeFrame.java) erstellt die grafische Oberfläche für den Benutzer und ruft zum Generieren des Barcodes eine Methode in der zweiten Klasse BarcodeHelfer.java auf. Hier findet nun die Berechnung statt.
Der String für den Code wird in Buchstaben unterteilt; diesen ist laut Definition ein Muster aus schwarzen und weißen Balken zugeordnet. Zusammen mit einer Prüfziffer werden sie in das Bild gemalt.
Zum Schluss wird der Ausgangsstring unter den Code geschrieben, damit der für den Menschen lesbar bleibt.
BarcodeHelfer.java hat drei Methoden: erstelle, strichmuster und bild. Erstere wird von der GUI mit der Zeichenkette, einer Referenz auf das Graphics-Objekt mit welchem der Strichcode ausgegeben werden soll und einer gewünschten Größe aufgerufen. Nun wird die Zeichenkette für jedes Zeichen durchlaufen. Mit der Methode strichmuster wird zu einem Zeichen der Index (dieser ist für die Berechnung der Prüfziffer nötig) und die entsprechende Kombination von schwarzen und weißen Balken ermittelt. Nachdem alle Zeichen durchlaufen wurden liegt ein Code mit lauter w (für white) und b (für black) vor. Beispiel: bbwbwwbwwwwbwwbwbbwwww. Die Prüfziffer wird nun noch angehängt und der Code ist fertig für die Ausgabe.
Hierfür wird die dritte Methode bild aufgerufen. Sie benötigt einerseits besagten Code, aber auch die Graphics-Referenz, auf die gezeichnet werden soll. Zusätzlich wird noch der Orginaltext übergeben, damit er unter dem Strichcode, für Menschen lesbar, ausgegeben werden kann. Die übergebene Größe stellt einen Streckfaktor dar, mit dem die Länge des Codes angepasst werden kann. Die einzelnen Code-Zeichen werden nun durchlaufen. Liegt ein "b" vor, wird ein schwarzer Balken gezeichnet.
Nun liegt die Zeichenkette als grafischer Barcode vor.

Quelltexte

Die beiden Klassen BarcodeFrame.java und BarcodeHelfer.java können Sie hier herunterladen. Zusätzlich gibt es noch die ausführbare JAR-Datei zum Download.

BarcodeHelfer: erstelle
public void erstelle(String ausgangS, Graphics g, int groesse){ String[] ausgang=ausgangS.split(""); //Text zu Array ausgang[0]="StartB"; //Das erste Zeichen ist StartB int zeichenAnzahl=ausgangS.length(); //Wieviele Zeichen gibt es String code=""; //Entgültiger Code mit b und w für schwarz und weiß int summe=104; //Summe der Multiplikationen der Indices mit der Stellung im Ausgangsstring int rest; //Rest der nach der Division der Summe mit 103 übrig bleibt (Wert der Prüfzahl) for (int i=0; i<=zeichenAnzahl; i++){ //Durchlaufe jedes Zeichen code=code+strichmuster(ausgang[i])[0]; //Füge den neuen Strichcode hinzu summe+=i*Integer.parseInt(strichmuster(ausgang[i])[1]); //Neue Summe mit dem neuen Zeichen } rest=summe%103; code=code+zuweisung[rest][1]+zuweisung[106][1]; bild(code, ausgangS, groesse, g); }

BarcodeHelfer: bild
public void bild(String codeS, String text, int groesse, Graphics g){ String[] code=codeS.split(""); //Der eingegebene Text wird für jeden Buchstaben zu einem Feld int codeAnzahl=codeS.length()-1; //Das erste Feld vom Array ist leer, desw. -1 int x=codeAnzahl*groesse+40; //Größen des Bildes (Breite) int y=150; //Größen des Bildes (Höhe) g.setColor(Color.BLACK); for (int i=1; i<=codeAnzahl; i++){ if (code[i].equals("b")){ g.fillRect(i*groesse+19, 20, groesse, y-50); //Schwarzer Strich } } g.drawString(text,25,y-10); }