• 追加された行はこの色です。
  • 削除された行はこの色です。
---
category: swing
folder: NoWrapTextPane
title: JEditorPaneで長い行を折り返さない
tags: [JEditorPane, JTextPane, StyledDocument]
author: aterai
pubdate: 2007-09-24T18:04:06+09:00
description: JEditorPaneや、JTextPaneで、行をViewportの幅で折り返さないよう設定します。
image: https://lh6.googleusercontent.com/_9Z4BYR88imo/TQTQbo-LQJI/AAAAAAAAAfk/YnnnPAQE-R4/s800/NoWrapTextPane.png
---
* 概要 [#v31d450a]
* 概要 [#summary]
`JEditorPane`や、`JTextPane`で、行を`Viewport`の幅で折り返さないよう設定します。

#download(https://lh6.googleusercontent.com/_9Z4BYR88imo/TQTQbo-LQJI/AAAAAAAAAfk/YnnnPAQE-R4/s800/NoWrapTextPane.png)

* サンプルコード [#qd3a5388]
* サンプルコード [#sourcecode]
#code(link){{
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;
  }
}
}}

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

`JEditorPane`や`JTextPane`といった`StyledDocument`をモデルにしているテキストコンポーネントに非常に長い行をペーストした場合、表示が更新されなくなりますが、折り返しできなくしてしまうと多少ましになるようです。
- `JEditorPane`や`JTextPane`といった`StyledDocument`をモデルにしているテキストコンポーネントに極めて長い行をペーストすると表示が更新されなくなる場合がある
-- 折り返し不可に設定するとこの動作が緩和される?
- `JTextArea`でも行を極めて長くしてしまうと、カーソルキーの移動などで異常に時間がかかる場合がある
-- 例えばこのサンプルの`JTextArea`でカーソルを末尾(`EOF`)に移動し、一行目(非常に長い行)にKBD{Up}キーで移動すると発生する
-- [https://community.oracle.com/thread/1367888 Swing - Long last line in wrappable textarea hangs GUI (bug in java?)]

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

- 例えば、このサンプルで、カーソルを一番最後に移動し、一行目(非常に長い行)にKBD{Up}キーで移動すると発生する
- [https://forums.oracle.com/thread/1367888 Swing - Long last line in wrappable textarea hangs GUI (bug in java?)]

----
以下のような方法もあります。
- [https://forums.oracle.com/thread/1353861 Swing - Disabling word wrap for JTextPane]
-- `BoxView#layout(...)`をオーバーライド
- [https://community.oracle.com/thread/1353861 Swing - Disabling word wrap for JTextPane]
-- `BoxView#layout(...)`をオーバーライドして折り返しを不可に設定
- [http://www.java2s.com/Code/Java/Swing-JFC/NonWrappingWrapTextPane.htm Non Wrapping(Wrap) TextPane : TextField : Swing JFC : Java examples (example source code) Organized by topic]
-- `JTextPane#getScrollableTracksViewportWidth()`をオーバーライド
-- `JTextPane#getScrollableTracksViewportWidth()`をオーバーライドして折り返しを不可に設定

* 参考リンク [#ydbfb81a]
- [https://forums.oracle.com/thread/1353861 Swing - Disabling word wrap for JTextPane]
* 参考リンク [#reference]
- [https://community.oracle.com/thread/1353861 Swing - Disabling word wrap for JTextPane]
- [http://www.java2s.com/Code/Java/Swing-JFC/NonWrappingWrapTextPane.htm Non Wrapping(Wrap) TextPane : TextField : Swing JFC : Java examples (example source code) Organized by topic]
- [http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6502558 Bug ID: 6502558 AbstractDocument fires event not on Event Dispatch Thread]
- [https://bugs.openjdk.org/browse/JDK-6502558 Bug ID: 6502558 AbstractDocument fires event not on Event Dispatch Thread]
-- [http://weblogs.java.net/blog/alexfromsun/archive/2006/02/debugging_swing.html Alexander Potochkin's Blog: Debugging Swing, the final summary]
- [[JTextPaneを一行に制限してスタイル可能なJTextFieldとして使用する>Swing/OneLineTextPane]]

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