Javaプログラミング/Javaプログラミング関連情報

コンポーネントを使おう!(3ページ目)

今回は、実際にJFrameに主なコンポーネントを組み込んで使ってみましょう。

執筆者:掌田 津耶乃

ラジオボタンのJRadioButtonとButtonGroup


続いて、ラジオボタンです。AWTでは、ラジオボタン専用のクラスというのはなく、チェックボックス用のCheckboxクラスをCheckboxGroupに登録してグループ化すると、自動的にラジオボタンとして表示されるようになっていました。

Swingでは、ラジオボタンは、JRadioButtonという専用のクラスとして用意されています。これ自体には、グループ化のための機能はなく、Swingに用意されているButtonGroupというものに登録をすると自動的にグループ化されて動くようになります。では、これも簡単な例を挙げましょう。

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 JRadioButton radio1,radio2;
  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);
    radio1 = new JRadioButton("radio1");
    radio1.setBounds(new Rectangle(20,50,200,20));
    radio1.setActionCommand("Radio1 is Selected.");
    group.add(radio1);
    this.add(radio1);
    radio1.addActionListener(new ActionListener(){

      @Override
      public void actionPerformed(ActionEvent e) {
        label.setText(group.getSelection().getActionCommand());
      }

    });
    radio2 = new JRadioButton("radio2");
    radio2.setBounds(new Rectangle(20,75,200,20));
    radio2.setActionCommand("Radio2を選択。");
    group.add(radio2);
    this.add(radio2);
    radio2.addActionListener(new ActionListener(){

      @Override
      public void actionPerformed(ActionEvent e) {
        label.setText(group.getSelection().getActionCommand());
      }

    });
    group.setSelected(radio1.getModel(), true);
  }
  
  public static void main(String[] args) {
    new SampleApp().setVisible(true);
  }
}

ラジオボタンをクリックすると、選択が変わり、メッセージが表示される。


ここでは2つのラジオボタンを用意し、クリックするとメッセージを表示させています。ここでは、ラジオボタンをグループ化するのに、ButtonGroupインスタンスにaddで組み込みをしていますね。ButtonGroupは、組み込まれたボタンの中から1つだけが選択されるように機能します。

また、ラジオボタンにはActionListenerを組み込み、選択されたボタンの情報を表示するようにしてあります。JRadioButtonには、ActionListenerや、状態変更字のChangeListenerが用意されており、これらでイベント処理を行えます。選択されたボタンは、ButtonGroupのgetSelectionを使って得ることができます。

このJRadioButtonとButtonGroupを使ったラジオボタンの利用では、注意しておく点が2つあります。1つは、「ButtonGroupは、ラジオボタン用の機能ではない」ということ。これは、あくまで「ボタンをグループ化するためのもの」です。ということは? JRadioButton以外のものでも、実は利用することができるのです。ボタンをON/OFFして使えるものであれば、どんなものでもグループ化できます。

もう1つの注意点は、「メソッドによっては、ButtonModelと呼ばれるものが必要となる」という点です。JRadioButtonだけでなく、それ以外のボタンも使えるということは、どんなボタンクラスのインスタンスがButtonGroupに組み込まれるかわからないということでもあります。ただし、どんな種類のボタンであれ、「ON/OFFして使えるものである」という点は共通しています。

こうした、ボタンの「振る舞いに関するクラスが、「モデルクラス」と呼ばれるものです。それぞれのボタンクラスには、そのボタンがどのような振る舞いをするかによって、それに対応するモデルクラスというものが組み込まれているのです。例えば、ButtonGroupに1つ目のJRadioButtonを選択させる処理をしている部分を見てみましょう。

group.setSelected(radio1.getModel(), true);

setSelectedでボタンを選択させていますが、問題は引数です。ここではJRadioButtonの「getModel」というメソッドを使って、そのボタンのボタンモデルを指定しています。こうすることで、ボタンモデルに「選択状態をこのように設定してください」ということを伝えると、それにあわせてボタンの状態が変更されるのですね。

まぁ、この「モデル・クラス」という考え方は、なかなか抽象的でつかみにくいものですので、今すぐ完璧に理解する必要はありません。「Swingのコンポーネントは、1つのクラスだけでなく、さまざまな機能を提供する複数のクラスで作られているのだ」ということだけ理解をしておきましょう。


  • 前のページへ
  • 1
  • 2
  • 3
  • 4
  • 次のページへ

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

    All About公式SNS
    日々の生活や仕事を楽しむための情報を毎日お届けします。
    公式SNS一覧
    © All About, Inc. All rights reserved. 掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます