テキストエリアのサイズをピクセル単位で設定する

テキストエリアのサイズは、コンストラクタやメソッドによって指定した列数と行数や初期値によって決まりますが、ピクセル単位でサイズを指定することもできます。ここではテキストエリアをピクセル単位でサイズを設定する方法について解説します。

(2022 年 04 月 11 日公開 / 2022 年 04 月 11 日更新)

ピクセル単位でサイズを設定する

テキストエリアのサイズをピクセル単位で設定するには JTextArea クラスの親クラスである JComponent クラスで用意されている setPreferredSize メソッドを使います。

public void setPreferredSize(Dimension preferredSize)

このコンポーネントの適切なサイズを設定します。 preferredSizeがnullの場合、UIで適切なサイズを要求します。

オーバーライド:
setPreferredSize 、クラス: Component

パラメータ:
preferredSize - 新しい推奨サイズ、またはnull

引数にはサイズを表す Dimension クラスのオブジェクトを指定します。( Dimension クラスの詳細は「Dimensionクラス」を参照して下さい)。

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

JTextArea textarea = new JTextArea();
textarea.setPreferredSize(new Dimension(200, 100));

コンポーネントでサイズを設定する場合、使用しているレイアウトマネージャーによってはコンポーネントに設定したサイズは無視される場合がありますのでご注意ください。例えばレイアウトマネージャーとして BorderLayout を使用している場合はコンポーネントに設定されたサイズは無視されます。

テキストエリアにピクセル単位だけでサイズを指定した場合は、無条件でそのサイズとなります。また行数と列数を指定しているテキストエリアにサイズを指定して場合、より大きなサイズとなるように設定されます。

サンプルプログラム

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample7_1.java という名前で保存します。

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

class JSample7_1 extends JFrame{
  public static void main(String args[]){
    JSample7_1 frame = new JSample7_1("MyTitle");
    frame.setVisible(true);
  }

  JSample7_1(String title){
    setTitle(title);
    setBounds(100, 100, 600, 400);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JTextArea textarea1 = new JTextArea();
    textarea1.setPreferredSize(new Dimension(400, 50));

    JTextArea textarea2 = new JTextArea(8,20);

    JTextArea textarea3 = new JTextArea(8,20);
    textarea3.setPreferredSize(new Dimension(400, 50));

    JPanel p = new JPanel();
    p.add(textarea1);
    p.add(textarea2);
    p.add(textarea3);

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

次のようにコンパイルを行います。

javac JSample7_1.java

ピクセル単位でサイズを設定する(1)

コンパイルが終わりましたら実行します。

java JSample7_1

テキストエリアを 3 つ追加しました。 1 つ目のテキストエリアはピクセル単位でサイズを指定しています。 2 つ目と 3 つ目はコンストラクタで行数と列数を指定してテキストエリアを作成していますが、 3 つ目のテキストエリアはあとからピクセル単位でサイズを指定しています。この時、幅についてはピクセル単位で指定したサイズの方が大きかったので幅はピクセル単位で指定したサイズに変わりましたが、高さはピクセル単位で指定したサイズよりも列数で指定していたサイズの方が大きかったので変わっていません。

ピクセル単位でサイズを設定する(2)

ピクセル単位でサイズを設定した時の折り返しについて

テキストエリアを行数と列数を指定して作成した場合、横幅を超えるようなテキストを入力するとテキストエリアの幅が自動的に拡張されていきました。高さについても同じように確報されます。それに対してテキストエリアのサイズをピクセル単位で指定して作成した場合、横幅を超えるようなテキストを入力してもテキストエリアの幅は拡張されず、また折り返しも行われません。

ただピクセル単位でテキストエリアのサイズを指定した場合でも、 setLineWrap メソッドを使って折り返しを行うように設定すれば横幅を超えるテキストを入力した場合に折り返しが行われます。(詳しくは「テキストエリアに入力されたテキストが折り返して表示されるように設定する」を参照されてください)。

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

JTextArea textarea = new JTextArea();
textarea.setPreferredSize(new Dimension(200, 100));
textarea.setLineWrap(true);

サンプルプログラム

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample7_2.java という名前で保存します。

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

class JSample7_2 extends JFrame{
  public static void main(String args[]){
    JSample7_2 frame = new JSample7_2("MyTitle");
    frame.setVisible(true);
  }

  JSample7_2(String title){
    setTitle(title);
    setBounds(100, 100, 600, 400);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JTextArea textarea1 = new JTextArea();
    textarea1.setPreferredSize(new Dimension(180, 50));

    JTextArea textarea2 = new JTextArea();
    textarea2.setPreferredSize(new Dimension(180, 50));
    textarea2.setLineWrap(true);

    JPanel p = new JPanel();
    p.add(textarea1);
    p.add(textarea2);

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

次のようにコンパイルを行います。

javac JSample7_2.java

ピクセル単位でサイズを設定した時の折り返しについて(1)

コンパイルが終わりましたら実行します。

java JSample7_2

テキストエリアを 2 つ追加しました。 どちらもピクセル単位でサイズを設定してありますが、 2 つ目のテキストエリアは折り返しを行うように設定しました。

ピクセル単位でサイズを設定した時の折り返しについて(2)

1 つ目のテキストエリアに "My Name is Tarou Yamada. I live in Tokyo." というテキストを入力すると、ピクセル単位でサイズを指定しているため、横幅を超えたテキストを入力してもテキストエリアは自動的に拡張されずに一部のテキストは見えない状態で入力されています。

ピクセル単位でサイズを設定した時の折り返しについて(2)

同じように 2 つ目のテキストエリアに "My Name is Tarou Yamada. I live in Tokyo." というテキストを入力すると、折り返しの設定が行われているので横幅を超えるテキストは自動的に折り返して表示されます。

ピクセル単位でサイズを設定した時の折り返しについて(2)

このようにピクセル単位でサイズを設定した場合でも折り返しの設定は有効に機能します。

-- --

テキストエリアをピクセル単位でサイズを設定する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。