ラベルのサイズの設定と枠線の表示

ラベルのサイズは通常表示される文字列の大きさに調整されますが、任意のサイズに設定することができます。またラベルには枠線を設定することもできます。ここではラベルのサイズを設定する方法、およびラベルに枠線を表示する方法について解説します。

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

ラベルのサイズを設定する

ラベルのサイズを設定するには JLabel クラスの親クラスである JComponent クラスで用意されている setPreferredSize メソッドを使います。

public void setPreferredSize(Dimension preferredSize)

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

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

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

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

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

JLabel label = new JLabel("MyLabel");
label.setPreferredSize(new Dimension(200, 100));

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

サンプルプログラム

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

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

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

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

    JLabel label1 = new JLabel("Hello!");
    label1.setOpaque(true);
    label1.setBackground(Color.YELLOW);

    JLabel label2 = new JLabel("Good!");
    label2.setOpaque(true);
    label2.setBackground(Color.GREEN);
    label2.setPreferredSize(new Dimension(100, 100));

    JLabel label3 = new JLabel("Bye!");
    label3.setOpaque(true);
    label3.setBackground(Color.RED);
    label3.setPreferredSize(new Dimension(200, 200));

    JPanel p = new JPanel();
    p.add(label1);
    p.add(label2);
    p.add(label3);

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

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

javac JSample4_1.java

ラベルのサイズを設定する(1)

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

java JSample4_1

ラベルを 3 つ作成し、最初のラベルはサイズを設定せず、 2 番目と 3 番目のラベルにはサイズを設定しています。サイズが設定されたことが分かりやすいようにラベルには背景色を設定しています。またレイアウトマネージャーによってサイズが変更されないように、サイズに影響を与えない FlowLayout がデフォルトで設定されている JPanel にラベルを追加しています。

ラベルのサイズを設定する(2)

1 番目のラベルのようにサイズを設定していないラベルのサイズは表示している文字列のサイズに自動的に設定されています。 2 番目と 3 番目のラベルは設定したサイズに設定されています。

ラベルに枠線を表示する

ラベルに枠線を設定するには JLabel クラスの親クラスである JComponent クラスで用意されている setBorder メソッドを使います。

public void setBorder(Border border)

このコンポーネントのボーダーを設定します。 Borderオブジェクトは、コンポーネントのイン・セットを定義し(コンポーネントで直接設定されているイン・セットをオーバーライドする)、任意でそれらのイン・セットの境界内のボーダー装飾をレンダリングします。 Swingコンポーネントで装飾領域および非装飾領域(マージンおよびパディングなど)の両方を生成するには、イン・セットではなくボーダーを使用する必要があります。 単一のコンポーネント内で複数のボーダーを入れ子にするには、複合ボーダーを使用できます。
技術的にはJComponentを継承するどのオブジェクトにもボーダーを設定できますが、標準のSwingコンポーネントのルック・アンド・フィールの実装の多くは、ユーザー設定のボーダーでは正しく動作しません。 通常、JPanelまたはJLabel以外の標準のSwingコンポーネントでボーダーを設定するときは、コンポーネントをJPanelに入れて、JPanelでボーダーを設定することをお勧めします。

これはバウンド・プロパティです。

パラメータ:
border - このコンポーネントでレンダリングされるボーダー

引数には枠線を表す Border インターフェースを実装したクラスのオブジェクトを指定します。( Border インターフェースの詳細は「Border」を参照して下さい)。

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

JLabel label = new JLabel("MyLabel");
LineBorder border = new LineBorder(Color.RED, 2, true);
label.setBorder(border);

サンプルプログラム

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

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;
import java.awt.Color;
import java.awt.Container;
import java.awt.BorderLayout;
import java.awt.Dimension;

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

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

    JLabel label1 = new JLabel("Hello!");
    label1.setBorder(new LineBorder(Color.BLUE, 2, false));

    JLabel label2 = new JLabel("Bye!");
    label2.setPreferredSize(new Dimension(200, 200));
    label2.setBorder(new LineBorder(Color.RED, 8, true));

    JPanel p = new JPanel();
    p.add(label1);
    p.add(label2);

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

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

javac JSample4_2.java

ラベルに枠線を表示する(1)

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

java JSample4_2

2 つラベルを作成しそれぞれ枠線を表示しています。

ラベルに枠線を表示する(2)

-- --

ラベルのサイズを設定する方法、およびラベルに枠線を表示する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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