Swing/NoWrapTextPane の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/NoWrapTextPane へ行く。
- Swing/NoWrapTextPane の差分を削除
--- 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 --- * 概要 [#summary] `JEditorPane`や、`JTextPane`で、行を`Viewport`の幅で折り返さないよう設定します。 #download(https://lh6.googleusercontent.com/_9Z4BYR88imo/TQTQbo-LQJI/AAAAAAAAAfk/YnnnPAQE-R4/s800/NoWrapTextPane.png) * サンプルコード [#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; } } }} * 解説 [#explanation] 上記のサンプルでは、スパンの必要サイズを計算する`calculateMinorAxisRequirements`メソッドなどをオーバーライドして、行折り返し段落のビュー(`ParagraphView`)で折り返しが発生しないように設定しています。 - `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?)] ---- - [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()`をオーバーライドして折り返しを不可に設定 * 参考リンク [#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] - [https://bugs.openjdk.java.net/browse/JDK-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]] * コメント [#comment] #comment #comment