- Home ›
- Swing ›
- ラベルの作成(JLabelクラス) ›
- HERE
文字列と画像の位置関係を設定
文字列と画像を両方ともラベルに表示した場合に、文字列と画像の位置関係を設定する方法を確認します。デフォルトでは画像の右側にラベルが表示されます。また垂直方向では文字列と画像が中央揃いの位置で表示されます。
画像に対する文字列の水平位置
画像に対する文字列の水平位置を設定するにはJLabelクラスで用意されているsetHorizontalTextPositionメソッドを使います。
setHorizontalTextPosition public void setHorizontalTextPosition(int textPosition)
ラベルテキストのイメージに対する水平位置を設定します。 パラメータ: 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メソッドを使います。
setVerticalTextPosition public void setVerticalTextPosition(int textPosition)
ラベルのイメージに対するテキストの垂直位置を設定します。 このプロパティーのデフォルト値は 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メソッドを使います。
setIconTextGap public void setIconTextGap(int iconTextGap)
アイコンプロパティーとテキストプロパティーが両方とも設定されている場合に、このプロパティー はそれらの間の距離を定義します。 このプロパティーのデフォルト値は 4 ピクセルです。 パラメータ: iconTextGap - 文字列と画像の距離
引数には文字列と画像の距離をピクセル単位で指定します。デフォルトの値は4ピクセルで、画像と文字列が4ピクセル離れて表示されています。
実際の使い方は次のようになります。
JLabel label = new JLabel(); labe.setText("文字列"); ImageIcon icon = new ImageIcon("./img/sample.png"); label.setIcon(icon); label.setIconTextGap(10);
この場合、文字列と画像は10ピクセル離れて表示されます。
サンプルプログラム
では実際に試してみます。
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 )