Hi werte Javafreunde im Forum,
ich versuche aktuell ein Rechnungsformular automatisch zu erstellen. Dazu benutze ich
diverse Comboboxen und ein JTextPane. Mir ist bekannt, dass es Alignmentfunktionen gibt,
aber ich denke, da ich die Justierung zeilenbasiert machen möchte und nicht Abschnittsweise
kann ich diese Funktionen nicht anwenden.
Die Idee ist wie folgt:
Adressdaten auf der linken Seite und Bankdaten rechts also ungefähr so:
Firma Bankdaten
Müller Kontonummer
Heizungsbau BLZ
Neue Strasse 3 …
12345 Musterhausen …
Dazu ermittele ich aus meinem Adressstring der über split in ein Array eingelesen wird die Länge des Strings
und vergleiche sie mit einer Standardlänge (einfach per Definition auf 5 gesetzt) - die Standardanzahl von
Spaces ist testweise auf 30 gesetzt.
Nach meiner Ansicht habe ich vier Fälle:
- Der String ist größer als 5 - somit müssen die Spaces um die Differenz verringert werden.
- Der String ist kleiner als 5 aber größer als 0 - die Spaces müssen um die Differenz vergrößert werden.
- Der String ist gleich 5 - Spaces sind auf dem Standardwert 30.
- Der String ist kleiner ein Leerstring - der Wert der Spaces ist 35.
Somit müsste ich bei einer monospaced Schrift einen immer gleichen Abstand haben obwohl die Adressstrings ja in der Größe variabel sind.
Hier mal ein Anwendungsbeispiel aus der Praxis danach meine Ausgabe und der Codeabschnitt:
Architekturbüro (15)
Kammerer (8)
Blumenstr.350 (13)
73262 Reichenbach/Fils (22)
Programmermittelte Wert (sind meines Erachtens korrekt):
Das Wort ist größer um 10 Zeichen.
Somit werden 20+ angehängt
Das Wort ist größer um 3 Zeichen.
Somit werden 27+ angehängt
Leerstring.
Somit werden 35 + angehängt
Das Wort ist größer um 7 Zeichen.
Somit werden 23+ angehängt
Das Wort ist größer um 17 Zeichen.
Somit werden 13+ angehängt
Ausgabe in der JTextPane ergibt jedoch:
Architekturbüro0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,Bankverbindungen
Kammerer0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,Kreissparkasse Esslingen
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,KontoNr.10081895
Blumenstr.350,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,BLZ: 61150020
73262 Reichenbach/Fils0,1,2,3,4,5,6,7,8,9,10,11,12,
Die Zahlen stehen zu Testzwecken für die Spaces - wie man sieht ist alles verschoben - was läuft falsch?
Hier der Codeteil:
public void actionPerformed(ActionEvent e)
{
//Adresse
if (e.getActionCommand().equals("Adresse speichern")){
Blatt.setFont( new Font( "Monospaced", Font.PLAIN, 12 ));
doc = Blatt.getDocument();
String adresse=cmbAdresse.getSelectedItem().toString();
String Bankdaten ="Bankverbindungen//Kreissparkasse Esslingen//KontoNr.10081895//BLZ: 61150020//"+" ";
String[] Bank = Bankdaten.split("//");
String[] anschrift = adresse.split("//");
String Beschreibung = txtBeschreibung.getText();
String[] BV_Beschreibung=Beschreibung.split("//");
int i,k,k_kleiner=0,k_groesser=0;
String spaces="";
try {
for (i=0; i<anschrift.length;i++){
//Firma=5 Zeichen, das ist Standard
if ((anschrift**).length()== 5){
for(k=0;k<30;k++){//30 Spaces
spaces=spaces +k+",";
}
System.out.println("Das Wort ist Standargröße es werden 30 + angehängt "+k);
}
if ((anschrift**).length()==0){
for(k=0;k<35;k++){//kleiner
spaces=spaces +k+",";
}
System.out.println("Leerstring.");
System.out.println("Somit werden 35 + "+" angehängt");
k_kleiner=0;
}
if ((anschrift**).length() < 5 && (anschrift**).length() > 0){
k_kleiner =(5-(anschrift**).length());
for(k=0;k<(30+ k_kleiner);k++){//kleiner
spaces=spaces +k+",";
}
System.out.println("Das Wort ist kleiner um " + k_kleiner + " Zeichen.");
System.out.println("Somit werden " + (30+k_kleiner) + "+ angehängt");
k_kleiner=0;
}
if ((anschrift**).length() > 5){
k_groesser =((anschrift**).length()-5);
for(k=0;k<(30 - k_groesser);k++){//groesser
spaces=spaces +k+",";
}
System.out.println("Das Wort ist größer um " + k_groesser + " Zeichen.");
System.out.println("Somit werden " + (30-k_groesser) + "+ angehängt");
k_groesser=0;
}
doc.insertString(doc.getLength(),anschrift**.toString()+ spaces + Bank**.toString()+"
",null);
spaces="";
}
}
Sorry wurde ein wenig ausführlich aber ich dachte je mehr Informationen , desto einfach ist es das Problem nachzuvollziehen.
Danke für etwaige Hilfen.
Grüße
Timo