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

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

概要

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

http://terai.xrea.jp/swing/linenumber/screenshot.png

サンプルコード

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());
  }
});

解説

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

参考リンク

コメント