Guten Tag community,
Es geht wieder um meinen Texteditor den ich schreibe (was für ein Wunder
). Aber diesmal um das Abspeichern.
Ich habe verschiedene Varianten, wie ich den Text formatiere: Schriftart, Schriftgröße, Schriftfarbe, Schrifthintergrundfarbe, Italic, Bold, Underlined und alles gemixt. All dies mache ich mit SimpleAttributeSet und StyleConstants.
Nun zu meinem eigentlichen Problem, dem Abspeichern. Ich habe überlegt, dass ich es so in der Art mache, beispielsweise erstmal nur an der Schriftart:
Ich dachte, dass es so in der Art [c]SchritfArt#ZeichnnummerAnfang:Zeichennummerende|nochmalAnfang:nochmalEnde|oderEinfachNurEiner|...[/c] Ich habe eine Funktion dafür geschrieben, di soweit auch super läuft, nur ist die 1. ziemlich lang und 2. eben bisher nur für die FontFamily.
Hier jetzt mein Code dazu:
Ich weiß, es ist nicht sehr elegant. War auch ersteinmal nur so eine Idee
Ist mein Code soweit in Ordnung? Kann man das auch noch besser machen?
Wie kann ich, wenn ich es jetzt auch für die 6 weiteren Formatierungen mache, Codevervielfachung vermeiden? Ich würde das nämlich ganz elegant 6X copy-and-pasten
Sagt auch einfach mal so eure Meinung dazu oder wie es anders machen könnte.
mfg
BH16
Es geht wieder um meinen Texteditor den ich schreibe (was für ein Wunder
Ich habe verschiedene Varianten, wie ich den Text formatiere: Schriftart, Schriftgröße, Schriftfarbe, Schrifthintergrundfarbe, Italic, Bold, Underlined und alles gemixt. All dies mache ich mit SimpleAttributeSet und StyleConstants.
Nun zu meinem eigentlichen Problem, dem Abspeichern. Ich habe überlegt, dass ich es so in der Art mache, beispielsweise erstmal nur an der Schriftart:
Ich dachte, dass es so in der Art [c]SchritfArt#ZeichnnummerAnfang:Zeichennummerende|nochmalAnfang:nochmalEnde|oderEinfachNurEiner|...[/c] Ich habe eine Funktion dafür geschrieben, di soweit auch super läuft, nur ist die 1. ziemlich lang und 2. eben bisher nur für die FontFamily.
Hier jetzt mein Code dazu:
Java:
public String getFormatting() {
String formatting = "";
String textGet, value;
ArrayList fontFamily = new ArrayList();
ArrayList italic = new ArrayList();
ArrayList bold = new ArrayList();
ArrayList underline = new ArrayList();
ArrayList fontSize = new ArrayList();
ArrayList fgColor = new ArrayList();
ArrayList bgColor = new ArrayList();
int location = getCaretPosition();
for (int i = 0; i < getText().length(); i++) {
setCaretPosition(i);
AttributeSet sas = getCharacterAttributes();
textGet = StyleConstants.getFontFamily(sas) + "#";
if (!fontFamily.contains(textGet)) {
fontFamily.add(textGet);
fontFamily.add(getCaretPosition() + "");
} else {
value = fontFamily.get(fontFamily.indexOf(textGet)+1) + "";
int numberBefore = -1;
try {
int j = 1;
while (true) {
if (numberBefore == -1) {
numberBefore = Integer.parseInt(value.charAt(value.length() - j) + "");
} else {
numberBefore = Integer.parseInt(value.charAt(value.length() - j) + "" + numberBefore);
}
j++;
}
} catch (Exception e) {}
int numberBeforeLength = 1;
if (numberBefore >= 10)
numberBeforeLength = 2;
else if (numberBefore >= 100)
numberBeforeLength = 3;
else if (numberBefore >= 1000)
numberBeforeLength = 4;
else if (numberBefore >= 10000)
numberBeforeLength = 3;
if (numberBefore == i-1) {
try {
if (value.charAt(value.length() - (numberBeforeLength + 1)) == ':') {
value = value.substring(0, value.length() - numberBeforeLength) + i;
} else {
value = value + ":" + i;
}
} catch (IndexOutOfBoundsException e) {
value = value + ":" + i;
}
} else {
value += "|" + i;
}
fontFamily.set(fontFamily.indexOf(textGet)+1, value);
}
}
for (int i = 0; i < fontFamily.size(); i++) {
formatting += fontFamily.get(i);
if (i%2 == 1) {
formatting += ";";
}
}
setCaretPosition(location);
return formatting;
}
Ich weiß, es ist nicht sehr elegant. War auch ersteinmal nur so eine Idee
Ist mein Code soweit in Ordnung? Kann man das auch noch besser machen?
Wie kann ich, wenn ich es jetzt auch für die 6 weiteren Formatierungen mache, Codevervielfachung vermeiden? Ich würde das nämlich ganz elegant 6X copy-and-pasten
Sagt auch einfach mal so eure Meinung dazu oder wie es anders machen könnte.
mfg
BH16