テキストエリアの作成と幅/行数の設定

広告

テキストエリアを作成するにはJTextFieldクラスを使用します。JTextFieldクラスは次のように定義されています。

public class JTextArea
extends JTextComponent
java.lang.Object
 L java.awt.Component
     L java.awt.Container
         L javax.swing.JComponent
             L javax.swing.text.JTextComponent
                 L javax.swing.JTextArea

テキストエリアはコンポーネントの親クラスであるJComponentクラスのサブクラスとなっています。またテキストを扱うクラス全般の親クラスであるJTextComponentクラスのサブクラスでもあります。

JTextAreaクラスのオブジェクトを作成

JTextAreaクラスを利用するにはコンストラクタを使ってJTextAreaクラスのオブジェクトを作成します。どのようなコンストラクタが用意されているか確認してみます。

コンストラクタの概要
JTextArea()
新しい TextArea を構築します。
JTextArea(Document doc)
指定されたドキュメントモデルと、ほかの引数はすべてデフォルト (null, 0, 0) で、新しい JTextArea を構築します。
JTextArea(Document doc, String text, int rows, int columns)
指定された行数と列数、および指定されたモデルで新しい JTextArea を構築します。
JTextArea(int rows, int columns)
指定された表示テキストで新しい TextArea を構築します。
JTextArea(String text)
指定された表示テキストで新しい TextArea を構築します。
JTextArea(String text, int rows, int columns)
指定されたテキストと行数と列数で新しい TextArea を構築します。

コンストラクタは初期値を持つかどうか、また幅(列数)と行数を設定するかどうかで異なっています。まずは初期値を指定しない1番目と4番目のコンストラクタを確認します。次のように定義されています。

新しい TextArea を構築します。デフォルトモデルが設定され、初期文字列は null、行/列数は 0 
に設定されます。

初期値がnull、行数及び列数が0のテキストエリアを作成します。

指定された行数と列数で新しい空の TextArea を構築します。デフォルトモデルが作成され、初期文
字列は null に設定されます。 

パラメータ:
  rows - 行数 >= 0
  columns - 列数 gt;= 0 
例外:
  IllegalArgumentException - 行または列の引数が負の数の場合

1番目の引数に行数、2番目の引数に列数を指定して下さい。指定した行数とと列数を持ち、初期値はnullに設定されたテキストエリアが作成されます。

なお列数とはピクセル単位ではなく文字数と考えて下さい。10と指定すれば10文字分の文字が表示できるだけの幅に設定されます。ただし、全ての文字の幅が同じではないのでどんな文字でも10文字分ぴったり入る幅ではありません。(大文字の「W」の文字数分ぐらいの幅となります)。また幅を設定しても入力できる文字数が制限するわけでもありません。

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

JTextArea area1 = new JTextArea();
JTextArea area2 = new JTextArea(5, 20);

行数の設定

テキストエリアを作成した後で行数を設定したり再設定したりすることができます。行数を設定するにはJTextAreaクラスで用意されているsetRowsメソッドを使います。

この TextArea の行数を設定します。新しい値を設定したあとに invalidate() を呼び出します。

パラメータ:
  rows - 行数 >= 0 
例外:
  IllegalArgumentException - 行が 0 より小さい場合

作成済みのテキストエリアの行数を設定します。引数には行数を指定して下さい。

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

JTextArea area = new JTextArea();
area.setRows(4);

幅の設定

テキストエリアを作成した後で幅を設定したり再設定したりすることができます。幅を設定するにはJTextAreaクラスで用意されているsetColumnsメソッドを使います。

この TextArea の列数を設定します。新しい値を設定したあとに invalidate() を実行します。 

パラメータ:
  columns - 列数 >= 0 
例外:
  IllegalArgumentException - 列数が 0 より小さい場合

作成済みのテキストエリアの幅を設定します。引数には列数を指定して下さい。列数の考え方はコンストラクタで列数を指定した場合と同じです。

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

JTextArea area = new JTextArea();
area.setColumns(20);

サンプルプログラム

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

SSample1_1.java

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

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

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

    JPanel p = new JPanel();

    JTextArea area1 = new JTextArea();
    JTextArea area2 = new JTextArea(3, 20);
    JTextArea area3 = new JTextArea();
    area3.setRows(6);
    area3.setColumns(15);

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

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

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

テキストエリアの作成と幅/行数の設定

今回は3つのテキストエリアを作成しました。1つ目のテキストエリアは幅も行数も0なので表示されていません。

テキストエリアを設置することで利用者に文字の入力を行ってもらうことができます。

テキストエリアの作成と幅/行数の設定

テキストエリアはテキストフィールドと異なり複数行の入力を行うことができます。

( Written by Tatsuo Ikura )