LabelとJLabel, CheckboxとJRadioButton

 

あるクラスを初めて使う時に「なんでこうなってるの???」と
不思議に思うこともありますが、慣れてくると次第に理解できるようになります。

毎度、管理人イガジーです。

Java(に限りませんが、プログラミング言語)の仕様を考案・決定しているのも
「人間」なのです。
天から降ってくるものではないので、考え方や背景がわかってくると
その仕様の意味もなんとなく分かるようになるでしょう。
いつも書いているセリフになりますが「慣れ」です。

という訳で、AWT と Swing の違いを対比してみます。
今日の対象は、Label と JLabel,
Checkbox+CheckboxGroup と JRadioButtonです。

Label と JLabel の使い方は同じで、フォント(文字)の見栄えが異なる程度です。
ひとつだけイガジーがハマったのは、setBackgroud()での背景色を設定です。
JLabelでは、初期値(デフォルト)が背景=透明なので、setBackgroud() だけ
では背景に色が付きません。
setOpaque(true); として、背景を「不透明」に設定する必要があります。

次に、ラジオボタン(ひとつだけ選ぶコンポーネント)。
AWT では、Checkbox に CheckboxGroup を組み合わせてラジオボタンを
実現します。何か変な気もしますが、コンポーネントを増やしたく無かった
のではないかと思います(勝手な想像ですが)。

Swingでは、JRadiboButton がちゃんと存在します。ですが、JCheckboxGroup
というのは存在しなくて、ButtonGroup というもので束ねます。

選択されているかどうかは、AWT Checkboxでは、getState() で調べ、
Swing JRadioButton では、isSelected() で調べることができます。

以下に、サンプルソースを掲載しておきます。

import java.awt.Button;
import java.awt.Checkbox;
import java.awt.CheckboxGroup;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;

public class JSample {
	JFrame f=new JFrame();

	Label lb=new Label("AWT Label");
	JLabel jlb=new JLabel("JLabel");

	Checkbox cb1,cb2;
	JRadioButton rb1,rb2;

	JSample() {
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setLayout(new GridLayout(4,1));

		lb.setAlignment(Label.CENTER);
		lb.setBackground(Color.GREEN);
		f.add(lb);

		jlb.setHorizontalAlignment(JLabel.CENTER);
		jlb.setBackground(Color.YELLOW);
		jlb.setOpaque(true);
		f.add(jlb);

		Panel ap=new Panel();
		CheckboxGroup cg=new CheckboxGroup();
		cb1=new Checkbox("Checkbox+Group",cg,true);
		cb2=new Checkbox("AWT",cg,false);
		ap.add(cb1); ap.add(cb2);
		Button btn=new Button("Button");
		btn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				if (cb1.getState()) lb.setText("CheckBox+Group");
				else lb.setText("AWT");
			}
		});
		ap.add(btn);
		f.add(ap);

		JPanel sp=new JPanel();
		rb1=new JRadioButton("JRadio",true);
		rb2=new JRadioButton("Swing",false);
		ButtonGroup bg=new ButtonGroup();
		bg.add(rb1); bg.add(rb2);
		sp.add(rb1); sp.add(rb2);
		JButton jbtn=new JButton("JButton");
		jbtn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				if (rb1.isSelected()) jlb.setText("JRadio");
				else jlb.setText("Swing");
			}
		});
		sp.add(jbtn);
		f.add(sp);

		f.setSize(300,200);
		f.setVisible(true);
	}
	public static void main(String[] args) {
		new JSample();
	}
}

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)