TITLE:JEditorPaneで長い行を折り返さない

Posted by at 2007-09-24

JEditorPaneで長い行を折り返さない

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

  • &jnlp;
  • &jar;
  • &zip;
NoWrapTextPane.png

サンプルコード

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`でも行を非常に長くしてしまうと、カーソルキーの移動などで異常に時間がかかる場合があります。


以下のような方法もあります。

参考リンク

コメント