9. TextField / TextArea

テキストを扱う部品を紹介します。ここでは基本的な使い方のみ紹介します。そのほかのコンストラクタやメソッド、フィールドについては APIドキュメントを参照してください。

(1) 1行分なら TextField です

 1行分の入力領域を作りたいときには java.awt.TextField クラスを使います。テキストフィールドの作り方は、コンストラクタに何文字分の領域を確保するかという指定、またはどんな文字を表示した状態で作るか、といった指定ができます。
TextField tf = new TextField(20);
TextField tf = new TextField("Name");

 文字数を指定した場合、「これ以上の文字は入力できない」ということではなく、「だいたいこれぐらいの文字数が入力できる」という領域をつくりますという意味になります。

 テキストフィールド内の文字列を獲得したり、文字列を設定したりするメソッドは次の通りです。

String getText( )
テキストフィールド内に入力された文字列を獲得します。

void setText(String label)
テキストフィールドに文字列を設定します。引数を「""」とした場合、テキストフィールド内をクリアします。


 この2つのメソッドは TextField クラスのスーパークラスである TextComponent というクラスのメソッドです。TextComponent クラスのサブクラスは今回の TextField、そして TextArea です。ですから、この後で紹介する TextArea クラスでもこのメソッドを使うことができます。

 イベントに関する情報は以下の通りです。

イベントの種類 Enterキーを押したとき ActionEvent 発生
イベント処理用メソッド ActionListener インタフェース内に定義されている
void actionPerformed(ActionEvent e)
リスナ登録用メソッド void addActionListener(ActionListener obj)

  TFTest.java

// TFTest.java

import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;

public class TFTest extends Applet implements ActionListener {
    Button ok;
    TextField tf1;
    TextField tf2;


    public void init() {

        // コンポーネント作成
        ok = new Button("OK");
        tf1 = new TextField("何か入力してOKを押します");
        tf2 = new TextField(30);
        
        // レイアウト設定
        // 後ろの引数2つはコンポーネントの間隔の指定です
        setLayout(new GridLayout(3,1,10,10));

        // コンポーネント追加
        add(tf1);
        add(ok);
        add(tf2);

        // リスナ登録 
        tf1.addActionListener(this);
        ok.addActionListener(this);
    }

    public void actionPerformed(ActionEvent e) {
        String str = tf1.getText();
        tf2.setText(str);
        tf1.setText("");
    }
}


  TFTest.html

<APPLET CODE=TFTest.class width=200 height=100>
</APPLET>


 実行例 (画像をクリックすると実際のアプレットが起動します)





 この例題では、上のテキストフィールドに文字を入力し Enter キーを押す、または OK ボタンを押すと、下のテキストフィールドのその文字列をコピーします。コピーした後は、上のテキストフィールドをクリアします。



(2) 複数行の入力は TextArea

 もう1つのテキスト処理用のコンポーネントは java.awt.TextArea です。テキストエリアは複数行の入力用部品を提供します。テキストエリアを作るには、何行何列の大きさで作るかを指定します。
TextArea ta = new TextArea(5,40);

 1つ目の引数が「行数」、2つ目の引数が「横方向の文字数(列数)」です。上の例では5行分のテキストエリア(1行は40文字)を作ります。

 テキストエリア内の文字列の獲得、設定は TextField の方法と同じです。ただし、テキストエリアに文字を追加してきたい場合には次のメソッドを使います。

void append(String label)
テキストエリアの最後尾に文字列を追加します。

 setText( ) ではテキストエリア内の文字列をすべて置き換えてしまうので、順次追加をしていきたい場合には append( ) を使います。

 テキストエリアでは Enter キーを押してもイベントは発生しません。Enter キーを押してイベントが発生してしまうと改行の処理がめんどうになってしまいますよね。

  TATest.java

// TATest.java

import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;

public class TATest extends Applet implements ActionListener {
    Button ok;
    TextArea ta;

    public void init() {

        // コンポーネント作成
        ok = new Button("OK");
        ta = new TextArea(5,40);
        
        // レイアウト設定
        setLayout(new BorderLayout());

        // コンポーネント追加
        add(ok,"South");
        add(ta,"Center");

        // リスナ登録 
        ok.addActionListener(this);
    }

    public void actionPerformed(ActionEvent e) {
        System.out.println( ta.getText() );
    }
}


  TATest.html

<APPLET CODE=TATest.class width=300 height=200>
</APPLET>


 実行例 (画像をクリックすると実際のアプレットが起動します)



 この例題では、テキストエリアに文字列を入力し OK ボタンを押すと MS-DOS プロンプトに入力された文字列が表示されます。

前の章(8.Label/Button)   次の章(10.CheckBox/RadioButton)