アットウィキロゴ

JAVA 13 13

import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;

public class ex13
{
  public static void main(String[] args)
  {
    ShapeFrame f = new ShapeFrame("Practice 8-2 ShapeTest");
                                        // フレームを生成する
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);                 // フレームを表示する
  }
}

class ShapeFrame extends JFrame
{
  private int index;
  private JPanel panel;          // 図形を描画するパネルの宣言
  private JRadioButton[] rb;
  private Shape[] s;

  public ShapeFrame(String title)
  {
    setTitle(title);
    rb = new JRadioButton[]             // ボタンを生成する
    {
      new JRadioButton("直線", true),  
      new JRadioButton("矩形"),
      new JRadioButton("楕円")
    };

    s = new Shape[]                     // 描画する図形を生成する
    {
      new Line2D.Double(50.0, 50.0, 200.0, 200.0),      // 直線
      new Rectangle2D.Double(50.0, 50.0, 200.0, 150.0), // 矩形
      new Ellipse2D.Double(50.0, 50.0, 200.0, 150.0)    // 楕円
    };

    JPanel bp = new JPanel();           // ボタンを追加するパネルを生成する

    ActionListener listener = new ActionListener()  // ボタンのリスナー
    {
      // ボタンのクリックが発生したときに呼び出されるメソッド
      public void actionPerformed(ActionEvent e)
      {
        for (index = 0; index < 3; index++)
        {
          if (rb[index].isSelected())   // どのボタンが選択されているかを調べる
            break;
        }
        panel.repaint();                // パネルを再描画する
      }
    };

    ButtonGroup bg = new ButtonGroup(); // ボタングループを生成する

    for (int i = 0; i < 3; i++)
    {
      rb[i].addActionListener(listener);// ボタンにリスナーを追加する
      bg.add(rb[i]);              // ボタングループにラジオボタンを追加する
      bp.add(rb[i]);              // パネルにラジオボタンを追加する
    }

    panel = new JPanel()    // 図形を描画するパネルを生成する(匿名クラス)
      {
        public void paint(Graphics g)   // メソッドのオーバーライド
        {
          super.paint(g);               // 基本クラスのメソッドを呼び出す
          Graphics2D g2 = (Graphics2D)g;
          setBackground(Color.WHITE);
          g2.setPaint(Color.RED);             // 描画する図形の色を赤に設定する
          g2.setStroke(new BasicStroke(20F)); // 輪郭線の太さを設定する
          g2.draw(s[index]);                  // ボタンが示す図形を描画する
        }
      };

    setSize(300, 350);               // フレームのサイズを設定する
    panel.setSize(300, 250);           // パネルのサイズを設定する

    // フレームにボタンのパネルと描画用のパネルを追加する
    getContentPane().add(bp, BorderLayout.SOUTH);
    getContentPane().add(panel);
  }
}
最終更新:2010年01月04日 09:01