WisdomSoft - for your serial experiences.

8.3 複数行テキスト

改行を含む長文の入力や表示には JTextField クラスの代わりに JTexArea が使われます。

8.3.1 標準テキスト入力エリア

JTextField は単純な 1 行テキスト入力コンポーネントでした。これは、ユーザーデータを入力させるなど、用途が限られた入力で多用されていますが、より汎用的なテキストデータを入力、保存、表示するためのコンポーネントとしては適していません。メモ帳のような自由なテキスト入力コンポーネントを実現するには javax.swing.JTextArea クラスを用います。

javax.swing.JTextArea クラス
java.lang.Object
  |
  +--java.awt.Component
        |
        +--java.awt.Container
              |
              +--javax.swing.JComponent
                    |
                    +--javax.swing.text.JTextComponent
                          |
                          +--javax.swing.JTextArea
public class JTextArea extends JTextComponent

このクラスは、複数行の標準テキストを入力したり、表示したりするための領域を提供するコンポーネントです。JTextComponent クラスを継承しているため、基本的な使い方は JTextField と同じですが、文字列を改行して自由な文書を作成することができる点で異なります。

表1 JTextArea クラスの行に関する主なメソッド(抜粋)
コンストラクタ 解説
public JTextArea() フォルトの TextArea を構築する。
public JTextArea(String text) 指定された表示テキストで TextArea を構築する。
public JTextArea(int rows, int columns) 指定された行数と列数で空の TextArea を構築する。
public JTextArea(String text, int rows, int columns) 指定されたテキストと行数と列数で TextArea を構築する。
public JTextArea(Document doc) 指定されたドキュメントモデルで JTextArea を構築する。
public JTextArea(Document doc, String text, int rows, int columns) 指定された行数と列数、モデル、表示テキストで JTextArea を構築する。
メソッド
public void setTabSize(int size) タブを展開する文字数を設定する。
public int getTabSize() タブを展開するのに使う文字の数を返す。
public void setLineWrap(boolean wrap) テキスト領域の行折り返しポリシーを設定する。
public boolean getLineWrap() テキスト領域の行折り返しポリシーを返す。
public void setWrapStyleWord(boolean word) テキスト領域が折り返し行の場合に使う折り返し書式を設定する。
public boolean getWrapStyleWord() テキスト領域が折り返し行の場合に使う折り返し書式を返す。
public int getLineCount() 領域内に収める行数を返す。
public void setRows(int rows) この TextArea の行数を設定する。
public int getRows() TextArea 内の行数を返す。

JTextArea クラスで宣言されている新しいメソッドの多くは、JTextField クラスと同じものか、行を制御するためのメソッドで。JTextArea クラスで追加された行に関連する主なメソッドを表1に表します。

JTextArea コンポーネント上でテキストを入力して Enter (改行)キーを入力すればテキストは改行されますが、setLineWrap() メソッドの設定によっては、テキスト領域の幅では表示しきれなくなったテキストを自動的に折り返すこともできます。setLineWrap() メソッドに true を指定すると割り当て幅に収まりきらない長さの行は折り返されます。デフォルトでは折り返されません。setWrapStyleWord() メソッドに true を指定すれば、折り返しは空白文字で折り返すワード境界となります。デフォルトは false に設定されているため文字単位で折り返します。

コード1
import javax.swing.*;

public class Test extends JFrame {
	public static void main(String args[]) {
		JTextArea text = new JTextArea();
		text.setLineWrap(true);

		JFrame win = new Test();
		win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		win.setBounds(10 , 10 , 400 , 300);
		win.getContentPane().add(text);
		win.show();
	}
}
実行結果
コード1 実行結果

コード1は、ウィンドウの中央に複数行テキスト入力コンポーネントを表示します。このコンポーネントではテキストを改行させることができるため、長文など汎用的なテキストの管理に適しています。

ただし、テキストコンポーネントはテキストの表示サイズがコンポーネントのサイズを超えたときにスクロールバーを表示するべきですが、このプログラムのコンポーネントはスクロールバーを表示するコードを記述していません。テキストコンポーネントにスクロールバーを対応させるにはスクロールペインを使います。スクロールペインについては第9章で解説します。