TITLE:JTextAreaに表示できる行数を制限

JTextAreaに表示できる行数を制限

編集者:Terai Atsuhiro
作成日:2006-02-27
更新日:2021-12-31 (金) 01:43:36

概要

ドキュメントのサイズを一定にして、JTextAreaなど表示できる行数を制限します。JTextArea Memory Overflow ??にあるソースコードを参考にしています。

#screenshot

サンプルコード

 jta.setEditable(false);
 jta.getDocument().addDocumentListener(new DocumentListener() {
   public void insertUpdate(DocumentEvent e) {
     final Document doc = jta.getDocument();
     final Element root = doc.getDefaultRootElement();
     if(root.getElementCount()<=maxLines) return;
     SwingUtilities.invokeLater(new Runnable() {
       public void run() {
         removeLines(doc, root);
       }
     });
     jta.setCaretPosition(doc.getLength());
   }
   private void removeLines(Document doc, Element root) {
     Element fl = root.getElement(0);
     try{
       doc.remove(0, fl.getEndOffset());
     }catch(BadLocationException ble) {
       System.out.println(ble);
     }
   }
   public void removeUpdate(DocumentEvent e) {}
   public void changedUpdate(DocumentEvent e) {}
 });
 final Timer timer = new Timer(100, new ActionListener() {
   public void actionPerformed(ActionEvent e) {
     String s = new Date().toString();
     jta.append((jta.getDocument().getLength()>0)?"\n"+s:s);
   }
 });
  • &jnlp;
  • &jar;
  • &zip;

解説

一行追加された時に、規定の行数を越えている場合は、先頭から一行を削除しています。

上記のサンプルでは、10行以上になると先頭行から削除されていきます。また、複数行の入力やペーストには対応していません。それらにも対応する場合は、JTextArea Memory Overflow ??を参考にしてみてください。

参考リンク

コメント

  • sample実行できないよ -- cinik
    • jnlpファイルの名前をsampleからexampleに変更しているので、一旦キャッシュを消してみるとうまくいくかもしれません。(じゃなくてExceptionなどが発生しているのでしょうか?) -- terai