テキストエリアの折り返しの設定

広告

テキストエリアは設定された幅以上の文字を入力した場合に自動的に横方向に拡張していきます。

テキストエリアの折り返しの設定

そこでテキストエリアの幅まで文字列が入力されたら、自動的に拡張せずに折り返しを行って次の行へ移る設定を行います。なおテキストエリアの幅の最後で改行が挿入されるわけではなく、あくまで次の行に入力エリアが移るだけです。

テキストエリアの幅で文字列を折り返すにはJTextAreaクラスで用意されているsetLineWrapメソッドを使います。

テキスト領域の行折り返しポリシーを設定します。true に設定すると、割り当て幅に収まりきらな
い長さの行は折り返されます。false に設定すると、行は折り返されません。ポリシーを変更する
と、PropertyChange イベント (lineWrap) が発生します。デフォルトではこのプロパティーは 
false です。

パラメータ:
  wrap - 行を折り返すかどうかを示す

引数には折り返しを行うかどうかを表すboolean型の値を指定します。trueを設定すると折り返しが行われます。デフォルトの値はfalseです。

実際の使い方は次のようになります。

JTextArea area = new JTextArea(5, 15);
area.setLineWrap(true);

折り返しを単語単位で行う

setLineWrapメソッドを使うことでテキストエリアの幅で折り返しを行うことが出来ますが、英単語など単語の途中で折り返しが行われると見難くなることがあります。そこでテキストエリアの幅で無条件に折り返しを行うのではなく、単語が分割されないように単語の途中でテキストエリアの幅に達した場合には単語の先頭から次の行へ表示させることができます。

折り返しを単語単位で行うようにするにはJTextAreaクラスで用意されているsetWrapStyleWordメソッドを使います。

テキスト領域が折り返し行の場合に使う折り返し書式を設定します。true に設定すると、割り当て
幅に収まりきらない長さの行はワード境界 (空白部分) で折り返されます。false に設定すると、行
は文字境界で折り返されます。デフォルトではこのプロパティーは false です。

パラメータ:
  word - 行折り返しにワード境界を使用するかどうかを示す

なおどこからどこまでが1つの単語かを判別するには空白( )から空白までの間の文字が1つの単語と認識されます。またこの設定が有効なのは半角文字だけです。日本語などのマルチバイト文字は空白で区切られていても単語とは認識されないようです。

引数には単語単位で折り返しを行うかどうかを表すboolean型の値を指定します。trueを設定すると単語単位で折り返しが行われます。デフォルトの値はfalseです。

実際の使い方は次のようになります。

JTextArea area = new JTextArea(5, 15);
area.setLineWrap(true);
area.setWrapStyleWord(true);

サンプルプログラム

では実際に試してみます。

SSample4_1.java

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import java.awt.Container;
import java.awt.BorderLayout;

class SSample4_1 extends JFrame{
  public static void main(String args[]){
    SSample4_1 frame = new SSample4_1("タイトル");
    frame.setVisible(true);
  }

  SSample4_1(String title){
    setTitle(title);
    setBounds(100, 100, 300, 250);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JPanel p = new JPanel();

    JTextArea area1 = new JTextArea(3, 15);
    JTextArea area2 = new JTextArea(3, 15);
    area2.setLineWrap(true);
    JTextArea area3 = new JTextArea(3, 15);
    area3.setLineWrap(true);
    area3.setWrapStyleWord(true);

    p.add(area1);
    p.add(area2);
    p.add(area3);

    Container contentPane = getContentPane();
    contentPane.add(p, BorderLayout.CENTER);
  }
}

ではコンパイルを行った上で実行してみます。

テキストエリアの折り返しの設定

3つのテキストエリアに同じ文章である"public class JTextArea extends JTextComponent"を入力します。

テキストエリアの折り返しの設定

1つ目のテキストエリアはデフォルトの設定のため、幅に収まりきらない文字列を入力すると自動的に幅が拡張されます。2つ目は折り返しの設定をしていますので、幅いっぱいまで入力されると折り返しが行われます。3つ目は単語単位での折り返しを設定していますので、単語の途中で折り返しが行われないように折り返しが行われます。

( Written by Tatsuo Ikura )