• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JEditorPaneで長い行を折り返さない
#navi(../)
*JEditorPaneで長い行を折り返さない [#v31d450a]
>編集者:[[Terai Atsuhiro>terai]]~
作成日:2007-09-24~
更新日:&lastmod;

#contents

**概要 [#h7ae7cce]
JEditorPaneや、JTextPaneで、行をViewPortの幅で折り返さないよう設定します。

[[Swing - Disabling word wrap for JTextPane>http://forum.java.sun.com/thread.jspa?threadID=622683]]の投稿をそのまま引用しています。

#screenshot

**サンプルコード [#qd3a5388]
#code{{
class NoWrapParagraphView extends ParagraphView {
  public NoWrapParagraphView(Element elem) {
    super(elem);
  }
  protected SizeRequirements calculateMinorAxisRequirements(int axis, SizeRequirements r) {
  protected SizeRequirements calculateMinorAxisRequirements(
      int axis, SizeRequirements r) {
    SizeRequirements req = super.calculateMinorAxisRequirements(axis, r);
    req.minimum = req.preferred;
    return req;
  }
  public int getFlowSpan(int index) {
    return Integer.MAX_VALUE;
  }
}
}}
-&jnlp;
-&jar;
-&zip;

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

JEditorPaneやJTextPaneといったStyledDocumentをモデルにしているテキストコンポーネントに非常に長い行をペーストした場合、表示が更新されなくなりますが、折り返しできなくしてしまうと多少ましになるようです。

JTextAreaでも行を非常に長くしてしまうと、カーソルキーの移動などで異常に時間がかかる場合があります。
- 例えば、このサンプルで、カーソルを一番最後に移動し、一行目(非常に長い行)にUp↑キーで移動すると発生する

**参考リンク [#ydbfb81a]
- [[Swing - Disabling word wrap for JTextPane>http://forum.java.sun.com/thread.jspa?threadID=622683]]
- [[Non Wrapping(Wrap) TextPane : TextField : Swing JFC : Java examples (example source code) Organized by topic>http://www.java2s.com/Code/Java/Swing-JFC/NonWrappingWrapTextPane.htm]]

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