3.JLabel/JCheckBox/JRadioButton

これも使い方は簡単です。

(1) JLabel

 これは AWT の Label と同じです。Swing コンポーネント全体の特徴として、目に見える部品についてはほとんどがアイコンをつけることができます。もちろん JLabel もアイコン付きラベルにすることができます。

 JLabel では、もうすこし面白い使い方があります。ラベルを表すテキスト文字列に HTML が使えるのです。下の例題を実行してみてください。

 AWT のラベルは本当にラベルにしか使いませんでしたが、JLabel はこのあともいろんなところに出てきます。たとえば JTree や JTable といったコンポーネントの描画などに使われます。

 LabelSample.java

import java.awt.*;
import javax.swing.*;

class LabelSample extends JFrame {

    LabelSample() {
        super("LabelSample");

        Icon icon = new ImageIcon("tama1-b.gif");

        /* ラベル */
        JLabel label1 = new JLabel("普通のラベル");
        JLabel label2 = new JLabel("アイコン付き");
            label2.setIcon(icon);
        JLabel label3 
            = new JLabel("<html><font size=7 color=#ffaa00>
                    <b>こんなことも<br>できちゃう</b></font>");

        setSize(300,300);
        Container c = getContentPane();
        c.setLayout(new GridLayout(3,1));
        c.add(label1);
        c.add(label2);
        c.add(label3);
        setVisible(true);
    }

    public static void main(String args[]) {
        new LabelSample();
    }
}


 実行例


C:\java_test>javac LabelSample.java

C:\java_test>java LabelSample


実行結果



(2) JCheckBox

 JCheckBox は AWT の CheckBox と似た部品です。API ドキュメントを見てもわかりますが、JCheckBox は前回紹介した JToggleButton のサブクラスです。考えてみれば、チェックボックスは ON 状態、OFF状態を持ちますから、見た目は違いますがトグルボタンと同じですね。

 JToggleButton のサブクラスということは使い方もほとんど同じです。またボタンとしての基本機能は、これも前回紹介した AbstractButton クラスに定義されているので、こちらの機能を使えばよいことになります。もちろんアイコンも漬けられますよ。

 JCheckBox は Button 系のコンポーネントになるので、イベント処理は ActionEvent を使っておこないます。

  CheckBoxSample.java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class CheckBoxSample extends JFrame implements ActionListener {
    JCheckBox cb1;
    JCheckBox cb2;
    JCheckBox cb3;
    Icon icon1;
    Icon icon2;

    CheckBoxSample() {
        super("CheckBoxSample");

        /* ON状態用アイコン */
        icon1 = new ImageIcon("tama1-b.gif");

        /* OFF状態用アイコン */
        icon2 = new ImageIcon("tama2-p.gif");

        /* チェックボックス */
        cb1 = new JCheckBox("日本");
            cb1.addActionListener(this);
        cb2 = new JCheckBox("テレビ");
            cb2.addActionListener(this);
        cb3 = new JCheckBox("画像");
            cb3.addActionListener(this);
            cb3.setIcon(icon2);

        setSize(300,100);
        Container c = getContentPane();
        c.setLayout(new FlowLayout());
        c.add(cb1);
        c.add(cb2);
        c.add(cb3);
        setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {
        AbstractButton src = (AbstractButton)e.getSource();

        /* チェックボックスのラベルの取得 */
        String label = src.getText();

        /* チェック状態の取得 */
        boolean isSelected = src.isSelected();

        System.out.print("["+label+"] が");
        if ( isSelected ) {
            System.out.println("ONになりました");
            if ( src==cb3 ) {
                cb3.setIcon(icon1);
            }
        } else {
            System.out.println("OFFになりました");
            if ( src==cb3 ) {
                cb3.setIcon(icon2);
            }
        }

    }

    public static void main(String args[]) {
        new CheckBoxSample();
    }
}


 実行例

C:\java_test>javac CheckBoxSample.java

C:\java_test>java CheckBoxSample


 実行結果

 画像チェックボックスOFF状態

 画像チェックボックスON状態


(3) JRadioButton

 JRadioButton は同一グループ内で1つだけが ON 状態になるボタンです。AWT では RadioButton というクラスはありませんでしたが、Swing では新しく追加されました。使い方は JCheckBox と同じですが、ボタンをグループ化する処理を追加しないとラジオボタンの意味がありません。

 ボタンをグループ化するには javax.swing.ButtonGroup クラスを使います。実はこのクラスは JRadioButton のグループ化だけではなく、AbstractButton クラスのサブクラスであればどんなボタンであってもグループ化ができます。ですから、普通のボタンをラジオボタンのように使うことも可能です。

ButtonGroup group = new ButtonGroup();
group.add( rb1 );
group.add( rb2 );
group.add( rb3 );

 ボタンをグループ化するには、この例のように ButtonGroup オブジェクトをつくって、これに add します。これで1つのグループができあがります。グループから削除する場合は remove というメソッドを使います。詳しくは API ドキュメントを参照してください。

 RadioButtonSample.java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class RadioButtonSample extends JFrame implements ActionListener {
    JRadioButton rb1;
    JRadioButton rb2;
    JRadioButton rb3;
    Icon icon1;
    Icon icon2;

    RadioButtonSample() {
        super("RadioButtonSample");

        /* ON状態用アイコン */
        icon1 = new ImageIcon("tama1-b.gif");

        /* OFF状態用アイコン */
        icon2 = new ImageIcon("tama2-p.gif");

        /* ラジオボタン */
        rb1 = new JRadioButton("日本");
            rb1.addActionListener(this);
        rb2 = new JRadioButton("テレビ");
            rb2.addActionListener(this);
        rb3 = new JRadioButton("画像");
            rb3.addActionListener(this);
            rb3.setIcon(icon2);

        /* ボタングループに登録 */
        ButtonGroup group = new ButtonGroup();
        group.add(rb1);
        group.add(rb2);
        group.add(rb3);

        setSize(300,100);
        Container c = getContentPane();
        c.setLayout(new FlowLayout());
        c.add(rb1);
        c.add(rb2);
        c.add(rb3);
        setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {
        AbstractButton src = (AbstractButton)e.getSource();

        /* チェックボックスのラベルの取得 */
        String label = src.getText();
        System.out.print("["+label+"] が");
        System.out.println("ONになりました");

        /* 画像ボタンの状態の取得 */
        boolean isSelectedRb3 = rb3.isSelected();

        if ( isSelectedRb3 ) {
            rb3.setIcon(icon1);
        } else {
            rb3.setIcon(icon2);
        }
    }

    public static void main(String args[]) {
        new RadioButtonSample();
    }
}


実行例

C:\java_test>javac RadioButtonSample.java

C:\java_test>java RadioButtonSample


実行結果

 画像ラジオボタンOFF状態

 画像ラジオボタンON状態

前の章(2.Button系コンポーネント)