概要

JTextAreaの高さを拡張し、その最終行を超えてスクロール可能になるよう設定します。

サンプルコード

JTextArea textArea = new JTextArea() {
  @Override public Dimension getPreferredSize() {
    Dimension d = super.getPreferredSize();
    Container c = SwingUtilities.getAncestorOfClass(JScrollPane.class, this);
    if (c instanceof JScrollPane && isEditable()) {
      Rectangle r = ((JScrollPane) c).getViewportBorderBounds();
      d.height += r.height - getRowHeight() - getInsets().bottom;
    }
    return d;
  }
};
View in GitHub: Java, Kotlin

解説

  • デフォルトではテキストの最終行までがJTextAreaの推奨サイズとなり、その最終行までがスクロール可能領域となる
    • メモ帳(notepad.exe)などの動作と同じ
  • JTextArea#getPreferredSize()メソッドをオーバーライドし、JViewportの高さからJTextAreaの一行分を除いた高さを拡張し、最終行が表示上の先頭行になるまでスクロール可能に設定
    • 上記のサンプルではJTextAreaが編集可能の場合、最終行を超えてスクロール可能に設定している
    • Visual Studio Codeなどのエディタのデフォルト?
    • IntelliJ IDEAではエディタの設定からShow virtual space at file bottomで変更可能

参考リンク

コメント