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();
}
}
この記事へのコメントはこちら