package Test5_1_zxj;
import javax.swing.*;
import java.awt.*;
public abstract class Shape {
// 抽象类试验。定义一组具有继承关系的类。Shape(形状)类是一个抽象类,包含4个数据成员(坐标x,y,颜色c,图形对象g(Graphics类对象))
// ,一个构造方法和两个抽象方法(求面积area()和draw方法)。Square(正方形)由Shape派生,Rectangle(矩形)由Square派生,Circle由Shape派生。
//
// 对上述类进行测试。
//
// 请尝试按照利用坐标和颜色使用图形对象的方法进行图形对象的绘制和面积输出。
public int x,y;//坐标
public Color c;//颜色
public abstract void area();//面积方法
public abstract void draw(Graphics g);//绘图
public Shape()//构造函数
{
}
public static void main(String[] args)
{
MyFrame frame=new MyFrame();
frame.setVisible(true);//告诉电脑数据模型已经建构好了,窗体可见
}
public static class MyFrame extends JFrame//继承窗口类的子类MyFrame
{
public static final String title = "图形绘制";
public static final int width=800;//设置宽
public static final int height=800;//高
public MyFrame()
{
super();//将当前对象作为父类的一个实例引用
setTitle(title);//显示窗体的标题
setSize(width,height);//设置面板大小
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//关闭窗口
setLocationRelativeTo(null);//设置窗口相对于指定组件的位置,如果组件当前c或为null,则窗口至于中央,中点可以使用GraphicsEnvironment.getCenterPoint确定
MyPanel panel=new MyPanel(this);//实例化面板类
setContentPane(panel);//给窗口增加一个面板类,为之后的内容搭建一个平台
}
public static class MyPanel extends JPanel
{
private MyFrame frame;
public MyPanel(MyFrame frame)//构造函数
{
super();//引用父类成员
this.frame=frame;
}
public void paint(Graphics g)
{
super.paint(g);
Square s=new Square(20,20,80,80);//正方形的绘图起点和边长
Rectangle r=new Rectangle(55,55,100,50);
Circle c=new Circle(40,50,20);
s.draw(g);
s.area();
r.draw(g);
r.area();
c.draw(g);
c.area();
}
}
}
}
class Square extends Shape
{
public int x,y;
public int a,b;
public Square(int x,int y,int a,int b)//构造函数
{
this.x=x;
this.y=y;
this.a=a;
this.b=b;
}
public void draw(Graphics g)
{
g.setColor(Color.yellow);
g.drawRect(x,y,a,b);//画图
}
public void area()
{
System.out.println(a*b);
}
}
class Rectangle extends Square
{
public int x,y;
public int a,b;
public Rectangle(int x,int y,int a,int b)//构造函数
{
super(x,y,a,b);//引用父类成员
this.x=x;
this.y=y;
this.a=a;
this.b=b;
}
public void area()
{
System.out.println(a*b);
}
public void draw(Graphics g)
{
g.setColor(Color.blue);
g.drawRect(x,y,a,b);//画图
}
}
class Circle extends Shape
{
public int x,y;
public int a;
public Circle(int x,int y,int a)//构造函数
{
this.x=x;
this.y=y;
this.a=a;
}
public void draw(Graphics g)
{
g.setColor(Color.red);
g.drawArc(x,y,a,a,//规定一个方形区域,画内切圆
0, 360);//圆的角度从0到360
}
public void area()
{
System.out.println(String.format("%.3f",Math.PI*a*a));//String.format("%2f",+Math.PI*a*a)
}
}