文字列と画像の位置関係を設定

広告

文字列と画像を両方ともラベルに表示した場合に、文字列と画像の位置関係を設定する方法を確認します。デフォルトでは画像の右側にラベルが表示されます。また垂直方向では文字列と画像が中央揃いの位置で表示されます。

画像に対する文字列の水平位置

画像に対する文字列の水平位置を設定するにはJLabelクラスで用意されているsetHorizontalTextPositionメソッドを使います。

ラベルテキストのイメージに対する水平位置を設定します。

パラメータ:
  textPosition - SwingConstants で定義されている定数 LEFT、CENTER、RIGHT、LEADING、または 
    TRAILING (デフォルト) のうちの 1 つ 
例外:
  IllegalArgumentException

引数には画像に対する文字列の水平位置を指定します。指定できる値は次の通りです。

JLabel.LEFT       左詰
JLabel.CENTER     中央
JLabel.RIGHT      右詰
JLabel.LEADING    左詰
JLabel.TRAILING   右詰 (デフォルト)

※各値はjavax.swing.SwingConstantsインターフェースで定義されており、JLabelクラスはSwingConstantsインターフェースを実装したクラスです。

※LEADING(先頭)とTRAILING(末)は利用している言語によって位置が変わります。日本語や英語のように左から右へ文字を表示する場合は LEADINGが左詰でTRAILINGが右詰ですが、右から左へ文字を表示するのが普通の言語の場合にはLEADINGが右詰でTRAILINGが左詰となります。

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

JLabel label = new JLabel();
labe.setText("文字列");
ImageIcon icon = new ImageIcon("./img/sample.png");
label.setIcon(icon);

label.setHorizontalTextPosition(JLabel.CENTER);

JLabel.CENTERを設定した場合、画像の上に重なるように文字列が表示されることになります。

画像に対する文字列の垂直位置

画像に対する文字列の垂直位置を設定するにはJLabelクラスで用意されているsetVerticalTextPositionメソッドを使います。

ラベルのイメージに対するテキストの垂直位置を設定します。

このプロパティーのデフォルト値は CENTER です。 

パラメータ:
  textPosition - SwingConstants で定義されている定数 TOP、CENTER (デフォルト)、または 
    BOTTOM のうちの 1 つ

引数には画像に対する文字列の垂直位置を指定します。指定できる値は次の通りです。

JLabel.TOP     上端に合わせる
JLabel.CENTER  中央(デフォルト)
JLabel.BOTTOM  下端に合わせる

※各値はjavax.swing.SwingConstantsインターフェースで定義されており、JLabelクラスはSwingConstantsインターフェースを実装したクラスです。

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

JLabel label = new JLabel();
labe.setText("文字列");
ImageIcon icon = new ImageIcon("./img/sample.png");
label.setIcon(icon);

label.setVerticalTextPosition(JLabel.CENTER);

JLabel.TOPを設定した場合は、文字列と画像の上端を合わせるように表示します。画像の上部に文字列が表示されるわけではありません。同じよう世にJLable.BOTTOMを設定した場合は、文字列と画像の下端を合わせるように表示します。

画像と文字列の間隔

画像と文字列の間の間隔を設定する事も可能です。JLabelクラスで用意されているsetIconTextGapメソッドを使います。

アイコンプロパティーとテキストプロパティーが両方とも設定されている場合に、このプロパティー
はそれらの間の距離を定義します。

このプロパティーのデフォルト値は 4 ピクセルです。 

パラメータ:
  iconTextGap - 文字列と画像の距離

引数には文字列と画像の距離をピクセル単位で指定します。デフォルトの値は4ピクセルで、画像と文字列が4ピクセル離れて表示されています。

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

JLabel label = new JLabel();
labe.setText("文字列");
ImageIcon icon = new ImageIcon("./img/sample.png");
label.setIcon(icon);

label.setIconTextGap(10);

この場合、文字列と画像は10ピクセル離れて表示されます。

サンプルプログラム

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

SSample9_1.java

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

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

  SSample9_1(String title){
    setTitle(title);
    setBounds(100, 100, 350, 300);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JPanel p = new JPanel();

    ImageIcon icon1 = new ImageIcon("./board.png");
    ImageIcon icon2 = new ImageIcon("./hasami.png");
    ImageIcon icon3 = new ImageIcon("./bag.png");
    ImageIcon icon4 = new ImageIcon("./dentaku.png");

    JLabel label1 = new JLabel("board", icon1, JLabel.CENTER);
    label1.setPreferredSize(new Dimension(100,80));
    label1.setBorder(new LineBorder(Color.blue, 2, true));
    label1.setHorizontalTextPosition(JLabel.LEFT);
    label1.setVerticalTextPosition(JLabel.TOP);

    JLabel label2 = new JLabel("board", icon1, JLabel.CENTER);
    label2.setPreferredSize(new Dimension(100,80));
    label2.setBorder(new LineBorder(Color.blue, 2, true));
    label2.setHorizontalTextPosition(JLabel.LEFT);
    label2.setVerticalTextPosition(JLabel.CENTER);

    JLabel label3 = new JLabel("board", icon1, JLabel.CENTER);
    label3.setPreferredSize(new Dimension(100,80));
    label3.setBorder(new LineBorder(Color.blue, 2, true));
    label3.setHorizontalTextPosition(JLabel.LEFT);
    label3.setVerticalTextPosition(JLabel.BOTTOM);

    JLabel label4 = new JLabel("board", icon2, JLabel.CENTER);
    label4.setPreferredSize(new Dimension(100,80));
    label4.setBorder(new LineBorder(Color.blue, 2, true));
    label4.setHorizontalTextPosition(JLabel.LEFT);
    label4.setVerticalTextPosition(JLabel.CENTER);

    JLabel label5 = new JLabel("board", icon2, JLabel.CENTER);
    label5.setPreferredSize(new Dimension(100,80));
    label5.setBorder(new LineBorder(Color.blue, 2, true));
    label5.setHorizontalTextPosition(JLabel.CENTER);
    label5.setVerticalTextPosition(JLabel.CENTER);

    JLabel label6 = new JLabel("board", icon2, JLabel.CENTER);
    label6.setPreferredSize(new Dimension(100,80));
    label6.setBorder(new LineBorder(Color.blue, 2, true));
    label6.setHorizontalTextPosition(JLabel.RIGHT);
    label6.setVerticalTextPosition(JLabel.CENTER);

    JLabel label7 = new JLabel("board", icon3, JLabel.CENTER);
    label7.setPreferredSize(new Dimension(150,80));
    label7.setBorder(new LineBorder(Color.blue, 2, true));

    JLabel label8 = new JLabel("board", icon3, JLabel.CENTER);
    label8.setPreferredSize(new Dimension(150,80));
    label8.setBorder(new LineBorder(Color.blue, 2, true));
    label8.setIconTextGap(20);

    p.add(label1);
    p.add(label2);
    p.add(label3);
    p.add(label4);
    p.add(label5);
    p.add(label6);
    p.add(label7);
    p.add(label8);

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

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

文字列と画像の位置関係を設定

上段の3つのラベルは文字列と画像の垂直位置を変えて表示しています。中段の3つのラベルは文字列と画像の水平位置を変えて表示しています。下段の2つのラベルは文字列と画像の間の間隔を変えて表示しています。

( Written by Tatsuo Ikura )