以下は、動作するように見える粗いDocumentFilterです。その基本的なアプローチは、挿入/追加が起きるようにすることです。実際の行の数を照会します。必要に応じて、先頭から行を削除します。
注意:テキストエリアの方法で計数線である(おそらく、@Staniからの確認を待っている)ライン-間-CRはなく、実際のラインをレイアウトされます。あなたの正確な要件に応じて、彼らはまたは
あなたをスイート(そうでない場合は、スタンのユーティリティメソッドを使用)しない場合があり、私はそれが安全
- だ場合、完全に確認してください驚いたとしませ驚い:insertメソッドのISN」をトンにtextAreaは、フィルタメソッドに最新の値を返すことが保証されている場合(おそらく、その長さのチェックができない代わりに
- (両方ともおそらく生産準備コードで)わからない置き換える方法を実施するのに必要な、と呼ばれますinvokeLaterでラップ)
コード:
public class MyDocumentFilter extends DocumentFilter {
private JTextArea area;
private int max;
public MyDocumentFilter(JTextArea area, int max) {
this.area = area;
this.max = max;
}
@Override
public void replace(FilterBypass fb, int offset, int length,
String text, AttributeSet attrs) throws BadLocationException {
super.replace(fb, offset, length, text, attrs);
int lines = area.getLineCount();
if (lines > max) {
int linesToRemove = lines - max -1;
int lengthToRemove = area.getLineStartOffset(linesToRemove);
remove(fb, 0, lengthToRemove);
}
}
}
// usage
JTextArea area = new JTextArea(10, 10);
((AbstractDocument) area.getDocument()).setDocumentFilter(new MyDocumentFilter(area, 3));
jtextareaの行にいくつの文字が許可されているか分かっている場合は、jtextareaの合計文字数で除算するだけです –
関連:http://stackoverflow.com/questions/479182/how-to-limit- JTextAreaに-MAX-行-と-coloums – CloudyMarble
それは私が、この場合に限定するために必要なだけの行または列ですので、文字の数は、一種の無関係です。 –