26.1.9.17 複数のボタン

アプレットを使った入力は,いろいろな支援ソフトの存在によりかなり楽に書けるようになっていますが,それでもかなりやっかいです.ボタン一つのFigure4にしても,様々なことを書く必要がありました.次の段階として,ボタンを2つにしてみましょう.2つになると,それぞれを作り,配置し,入力依頼をする他に,actionPerformedの中でどちらが押されたかを判別する必要が生じます.

import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;    //入力用のパッケージ
public class Figure4a extends Applet
                      implements ActionListener{
   int cx, cy, r;
   Button enlarge = new Button("enlarge"),
       shrink  = new Button("shrink");
   public void init(){
     add(enlarge);
     enlarge.addActionListener(this);
     add(shrink);
     shrink.addActionListener(this);
     r = 10;
     cx = getSize().width/2;
     cy = getSize().height/2;
   }
   public void actionPerformed(ActionEvent e){
      if(e.getSource()==enlarge && r < cx) r=r+10;
      if(e.getSource()==shrink  && r > 10) r=r-10;
      repaint();
   }
   public void paint(Graphics g){
      g.drawOval(cx-r, cy-r, 2*r, 2*r);
   }
}

fileFigure4a.java (iso-2022-jp)

メソッドactionPerformedは登録されたボタンを一手に引き受けますが,どのボタンが押されたかという情報は,ActionEvent型の パラメータeでもらいます.e.getSource()で実際に押されたボタンの名前がわかりますので,ボタンに従って動作を書くことになります.

このアプレットでは,円の半径(r)が大きすぎたり小さすぎたりしないようにしてあります.