2017-02-01 2 views
0

Ich versuche, eine Methode zu erstellen, die einen langen Text in Zeilen aufteilen und sie mit Graphics auf Dokumente zeichnen. Ich habe herausgefunden, wie ich die Zeilen, die ich von einer JTextArea-Komponente erhalte, aufteilen kann, aber nicht weiß, wie man sie umbrechen/umbrechen kann, wenn eine Zeile zu lang wird.Java teilt eine Zeichenfolge in mehrere an einer ausgewählten Position

Hier ist mein Code so weit:

void drawString(Graphics g, String text, int x, int y, Font w) { 
     g.setFont(w); 
     for (String line : text.split("\n")) 
      g.drawString(line, x, y += g.getFontMetrics().getHeight()); 
    } 

Jede Hilfe sehr geschätzt wird.

Vielen Dank.

Edit:

Meine Gedanken an einer Lösung dazu ist, die char Position der Zeichenfolge zu berechnen, und wenn es eine ausgewählte Position erreicht dann füge ich einen Zeilenumbruch („\ n“) gibt. Irgendwelche anderen Vorschläge oder sollte ich für diesen gehen? Danke.

+1

Was meinen Sie? Der aktuelle Code funktioniert gut mit neuen Zeilen, aber nicht, wenn sie zu lang werden. – Ssiro

+0

Ich habe falsch gelesen, ich werde den Kommentar löschen. – AntonH

Antwort

1

Sie können ein Wort Zählverfahren wie diese anstelle der Split-Methode verwenden:

public String[] splitIntoLine(String input, int maxCharInLine){ 

StringTokenizer tok = new StringTokenizer(input, " "); 
StringBuilder output = new StringBuilder(input.length()); 
int lineLen = 0; 
while (tok.hasMoreTokens()) { 
    String word = tok.nextToken(); 

    while(word.length() > maxCharInLine){ 
     output.append(word.substring(0, maxCharInLine-lineLen) + "\n"); 
     word = word.substring(maxCharInLine-lineLen); 
     lineLen = 0; 
    } 

    if (lineLen + word.length() > maxCharInLine) { 
     output.append("\n"); 
     lineLen = 0; 
    } 
    output.append(word).append(" "); 

    lineLen += word.length() + 1; 
} 
// output.split(); 
// return output.toString(); 
return output.toString().split("\n"); 
} 
+0

Es besteht keine Notwendigkeit, den Abschnitt "Code" im Zitatabschnitt zu umbrechen, es sei denn, es handelt sich um ein Zitat. In diesem Fall sollten Sie auch die Quelle in Ihre Antwort aufnehmen. – Pshemo

+0

Entschuldigung, habe es auf meinem Smartphone ... – clic

+0

Auch '.append (Wort +" ")' ist ein Zeichen, dass jemand Zweck von StringBuilder nicht versteht. Es wird verwendet, um eine String-Verkettung zu vermeiden, die einen eigenen neuen StringBuilder erzeugt, was bedeutet, dass dieser Code derselbe wie '.append (new StringBuilder (word) .append (" ") .toString())' ist. Wir sollten stattdessen 'append (word) .append (" ")' verwenden. – Pshemo

Verwandte Themen