2017-02-01 17 views
0

Я пытаюсь создать метод, который будет разделять длинный текст на строки и нарисовать их на документах с использованием графики. Мне удалось выяснить, как разделить строки, которые я получаю от компонента JTextArea, но не знаю, как заставить их обертывать/ломаться, когда линия становится слишком длинной.Java разделяет строку на несколько в выбранной позиции

Вот мой код до сих пор:

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()); 
    } 

Любая помощь приветствуется.

спасибо.

Edit:

Мои мысли о затруднительном об этом, чтобы вычислить положение обугленного строки и если он достигнет выбранной позиции, то я добавить разрыв строки («\ п») есть. Любые другие предложения или я должен пойти на это? Спасибо.

+1

Что вы имеете в виду? Текущий код хорошо работает с новыми строками, но не когда они становятся слишком длинными. – Ssiro

+0

Я неправильно понял, я удалю комментарий. – AntonH

ответ

1

Вы можете использовать метод подсчета слов, как это вместо метода разделенного:

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

Нет необходимости обертывать секцию «code» в разделе цитаты, если это не действительно цитата, и в этом случае вы должны также включить ее источник в свой ответ. – Pshemo

+0

извините, сделал это на моем смартфоне ... – clic

+0

Также '.append (word +" ")' означает, что кто-то не понимает цели StringBuilder. Он используется, чтобы избежать конкатенации строк, которая создает свой собственный новый StringBuilder, что означает, что этот код такой же, как '.append (новый StringBuilder (word) .append (" ") .toString())'. Вместо этого мы должны использовать 'append (word) .append (" ")'. – Pshemo