トグルボタンを使う
ButtonGroupでは、ラジオボタン以外のものでも、ON/OFFして利用できるものなら何でも使えるといいましたが、実際、そうしたボタンは標準で用意されているのでしょうか。――実は、あります。その1つは「JToggleButton」というものです。
これは、普通のプッシュボタンの形をしたラジオボタンといってよいでしょう。見かけはJButtonと同じですが、働きはJRadioButtonとほぼ同じ、という不思議なものです。では、先ほどの例を、このJToggleButtonに置き換えてみましょう。
package jp.allabout.java;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class SampleApp extends JFrame {
private static final long serialVersionUID = 1L;
private JLabel label;
private JToggleButton toggle1,toggle2;
private ButtonGroup group;
public SampleApp(){
group = new ButtonGroup();
this.setSize(new Dimension(300,200));
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(null);
label = new JLabel("This is Sample.");
label.setBounds(new Rectangle(20,20,200,20));
label.setFont(new Font("Serif",Font.BOLD,24));
this.add(label);
toggle1 = new JToggleButton("toggle1");
toggle1.setBounds(new Rectangle(20,50,200,20));
toggle1.setActionCommand("toggle2 is Selected.");
group.add(toggle1);
this.add(toggle1);
toggle1.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
label.setText(group.getSelection().getActionCommand());
}
});
toggle2 = new JToggleButton("toggle2");
toggle2.setBounds(new Rectangle(20,75,200,20));
toggle2.setActionCommand("toggle2を選択。");
group.add(toggle2);
this.add(toggle2);
toggle2.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
label.setText(group.getSelection().getActionCommand());
}
});
group.setSelected(toggle1.getModel(), true);
}
public static void main(String[] args) {
new SampleApp().setVisible(true);
}
}
トグルボタンをButtonGroupに組み込むと、常に1つだけが選択されるようになる。 |
基本的な使い方はJRadioButtonと同じですから説明は不要でしょう。Swingでは、単にAWTのコンポーネントの置き換えだけでなく、AWTにはなかった新たなコンポーネントも多数用意されています。こうしたものを試してみるのもまた楽しいものですね。
さて、ここまで登場したコンポーネント類は、基本的には「AWTにあったものとほぼ同等の機能を持つもの」でした。が、コンポーネントの中には、AWTと同じように見えても、内部的にはるかに複雑になっているものがあります。それは、一覧リストを表示するためのコンポーネントです。次回は、これについて説明をしましょう。