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