• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JTextAreaに表示できる行数を制限
#navi(../)
*JTextAreaに表示できる行数を制限 [#e59bb955]
>編集者:[[Terai Atsuhiro>terai]]~
作成日:2006-02-27~
更新日:&lastmod;

#contents

**概要 [#g22f601f]
ドキュメントのサイズを一定にして、JTextAreaなど表示できる行数を制限します。[[Java Forums - JTextArea Memory Overflow ??>http://forum.java.sun.com/thread.jspa?forumID=57&threadID=409418]]にあるソースコードを参考にしています。

http://terai.xrea.jp/swing/fifodocument/screenshot.png
#screenshot

**サンプルコード [#x24ef034]
 jta.setEditable(false);
 jta.getDocument().addDocumentListener(new DocumentListener() {
   public void insertUpdate(DocumentEvent e) {
     SwingUtilities.invokeLater(new Runnable() {
       public void run() {
         removeLines(jta);
       }
     });
   }
   public void removeUpdate(DocumentEvent e) {}
   public void changedUpdate(DocumentEvent e) {}
   private void removeLines(JTextArea textArea) {
     Document doc = textArea.getDocument();
     Element root = doc.getDefaultRootElement();
     while(root.getElementCount()>maxLines) {
       Element firstLine = root.getElement(0);
       try{
         doc.remove(0, firstLine.getEndOffset());
       }catch(BadLocationException ble) {
         System.out.println(ble);
       }
     }
     textArea.setCaretPosition(doc.getLength());
   }
 });
 final Timer timer = new Timer(100, new ActionListener() {
   public void actionPerformed(ActionEvent e) {
     if(jta.getDocument().getLength()>0) {
       jta.append("\n");
     }
     jta.append(new Date().toString());
   }
 });

-[[サンプルを起動>http://terai.xrea.jp/swing/fifodocument/sample.jnlp]]
-[[jarファイル>http://terai.xrea.jp/swing/fifodocument/sample.jar]]
-[[ソース>http://terai.xrea.jp/swing/fifodocument/src.zip]]
-&jnlp;
-&jar;
-&zip;

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

上記のサンプルでは、10行以上になると先頭行から削除されていきます。

**参考リンク [#z483e8cb]
-[[Java Forums - JTextArea Memory Overflow ??>http://forum.java.sun.com/thread.jspa?forumID=57&threadID=409418]]

**コメント [#ba2d344b]
#comment