JTextArea行中字符的限制

时间:2011-12-04 17:22:04

标签: java swing rows jtextarea

如何限制JTextArea行中的字符数,并将其跳到第二行?

2 个答案:

答案 0 :(得分:9)

如果您使用的是Swing和JTextArea,请尝试使用setWrapStyleWordsetLineWrap方法:

  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当然。

修改
我假设你正在使用Swing,但在重新阅读你的问题时我可能是错的。这是为Swing吗? AWT? Android的?其他?

答案 1 :(得分:1)

不知何故上述解决方案对我没有用。我改为使用如下的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);