如何限制JTextArea
行中的字符数,并将其跳到第二行?
答案 0 :(得分:9)
如果您使用的是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当然。
修改强>
我假设你正在使用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);