Como faço para limitar a quantidade de linhas de um JTextArea?
Exemplo:
Eu quero limitar para que o jTextArea teha no máximo 50 linhas. Se o usuário tentar iniciar a linha 51 pretendo emitir um aviso de que chegou ao máximo.
Tentei usar os métodos setLineWrap(true) em conjunto com o getLineCount() mas não estou tendo sucesso.
Obrigado pela resposta. Estava dando uma testada no código que você postou e percebi que ele limita a quantidade de caracteres do JTextArea.
Até achei uma alternativa para limitar a quantidade de linhas:
[code]public class LimitedLinesDocument extends DefaultStyledDocument {
private static final String EOL = "\n";
private int maxLines;
public LimitedLinesDocument(int maxLines) {
this.maxLines = maxLines;
}
public void insertString(int offs, String str, AttributeSet attribute) throws BadLocationException {
if (!EOL.equals(str) || StringUtils.occurs(getText(0, getLength()), EOL) < maxLines - 1) {
super.insertString(offs, str, attribute);
}
}
}[/code]
[code]public class StringUtils {
public static int occurs(String str, String subStr) {
int occurrences = 0;
int fromIndex = 0;
while (fromIndex > -1) {
fromIndex = str.indexOf(subStr, occurrences == 0 ? fromIndex : fromIndex + subStr.length());
if (fromIndex > -1) {
occurrences++;
}
}
return occurrences;
}
}
[/code]
Diante disso, me deparei com um segundo problema:
O LineWrap quebra a linha apenas visualmente no JtextArea, se o usuário escrever um parágrafo muito grande, que visualmente ocupe 5 linhas do JTextArea, ao exportar esse texto eu recebo apenas como uma única linha.
Eu preciso receber as 5 linhas, no formato identico que está apresentado na GUI para o usuário.