テキストフィールドの作成と幅の設定

広告

テキストフィールドを作成するにはJTextFieldクラスを使用します。JTextFieldクラスは次のように定義されています。

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

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

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

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

コンストラクタの概要
JTextField()
新しい TextField を構築します。
JTextField(Document doc, String text, int columns)
指定されたテキストストレージモデルと列数を使って新しい JTextField を構築します。
JTextField(int columns)
指定された列数で新しい空の TextField を構築します
JTextField(String text)
指定されたテキストで初期化される新しい TextField を構築します。
JTextField(String text, int columns)
指定されたテキストおよび列で初期化される新規 TextField を構築します。

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

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

初期値がnull、列数が0のテキストフィールドを作成します。

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

パラメータ:
  columns - 適切な幅の計算に使用する列数。 列数を 0 に設定すると、適切な幅はコンポーネント
    の実装から自然に得られる値になる

引数に列数を指定して下さい。指定した列数を持ち、初期値はnullに設定されたテキストフィールドが作成されます。

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

テキストボックスの幅などは、表示する文字列のフォントを変更すると文字の大きさに合わせて自動的に変更されます。テキストボックスのサイズをピクセル単位で固定のサイズに設定するにはsetPreferredSizeメソッドを使います(別のページで解説します。

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

JTextField text1 = new JTextField();
JTextField text2 = new JTextField(10);

幅の設定

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

この TextField の列数を設定し、配置を無効にします。

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

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

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

JTextField text = new JTextField();
text.setColumns(10);

サンプルプログラム

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

SSample1_1.java

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
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();

    JTextField text1 = new JTextField();
    JTextField text2 = new JTextField(10);
    JTextField text3 = new JTextField();
    text3.setColumns(15);

    p.add(text1);
    p.add(text2);
    p.add(text3);

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

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

テキストフィールドの作成と幅の設定

今回は3つのテキストフィールドを作成しました。幅を指定しない場合は0となりますので注意して下さい。

テキストフィールドを設置することで利用者に文字の入力を行ってもらうことができます。

テキストフィールドの作成と幅の設定

( Written by Tatsuo Ikura )