概要

JEditorPaneや、JTextPaneで、行をViewportの幅で折り返さないよう設定します。

サンプルコード

class NoWrapParagraphView extends ParagraphView {
  public NoWrapParagraphView(Element elem) {
    super(elem);
  }

  @Override protected SizeRequirements calculateMinorAxisRequirements(
      int axis, SizeRequirements r) {
    SizeRequirements req = super.calculateMinorAxisRequirements(axis, r);
    req.minimum = req.preferred;
    return req;
  }

  @Override public int getFlowSpan(int index) {
    return Integer.MAX_VALUE;
  }
}
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、スパンの必要サイズを計算するcalculateMinorAxisRequirementsメソッドなどをオーバーライドして、行折り返し段落のビュー(ParagraphView)で折り返しが発生しないように設定しています。

  • JEditorPaneJTextPaneといったStyledDocumentをモデルにしているテキストコンポーネントに極めて長い行をペーストすると表示が更新されなくなる場合がある
    • 折り返し不可に設定するとこの動作が緩和される?
  • JTextAreaでも行を極めて長くしてしまうと、カーソルキーの移動などで異常に時間がかかる場合がある

参考リンク

コメント