Предел символов в строке JTextArea - PullRequest
1 голос
/ 04 декабря 2011

Как я могу ограничить количество символов в строке JTextArea и заставить его перейти ко второму?

Ответы [ 2 ]

9 голосов
/ 04 декабря 2011

Если вы используете Swing и JTextArea, попробуйте использовать методы setWrapStyleWord и setLineWrap:

  textarea.setWrapStyleWord(true);
  textarea.setLineWrap(true);

Вы также можете установить количество столбцов JTextArea:

private static final int TA_ROWS = 20;
private static final int TA_COLS = 35;

private JTextArea textarea = new JTextArea(TA_ROWS, TA_COLS);

и, конечно, оберните JTextArea в JScrollPane.

Edit
Я предполагаю, что вы используете Swing, но при повторном чтении вашеговопрос я могу ошибаться.Это для свинга?AWT?Android?Другой?

1 голос
/ 26 февраля 2014

Каким-то образом вышеуказанное решение не сработало для меня. Вместо этого я использовал DocumentFilter, как показано ниже:

public class StockPublicNotesDocumentFilter extends DocumentFilter {  

 private final int maxLength;

 public StockPublicNotesDocumentFilter (int maxLength) {  
     this.maxLength = maxLength;
 }  

 /** 
  * {@inheritDoc} 
  */  

 public void insertString (DocumentFilter.FilterBypass fb, int offset, String str, AttributeSet attr)  
         throws BadLocationException {
     if ((fb.getDocument().getLength() + str.length()) <= this.maxLength)
            super.insertString(fb, offset, str, attr);
        else
            Toolkit.getDefaultToolkit().beep();
 }  

 /** 
  * {@inheritDoc} 
  */  

 public void replace (DocumentFilter.FilterBypass fb, int offset, int length, String str, AttributeSet attrs) throws BadLocationException {
     if ((fb.getDocument().getLength() + str.length()) <= this.maxLength)
            super.replace(fb, offset, length, str, attrs);
        else
            Toolkit.getDefaultToolkit().beep();

 }
}

Это будет называться

JTextArea comment = componentFactory.generateTextArea(stock.getComment());

StockPublicNotesDocumentFilter publicNotesfilter = new StockPublicNotesDocumentFilter(PUBLIC_NOTES_MAX_CHARS);
        ((PlainDocument) comment.getDocument()).setDocumentFilter(publicNotesfilter);
...