8-3 绘制随机图形 (10 分)

定义4个类,MyShape、MyLine、MyRectangle和MyOval,其中MyShape是其他三个类的父类。MyShape为抽象类,包括图形位置的四个坐标;一个无参的构造方法,将所有的坐标设置为0;一个带参的构造函数,将所有的坐标设置为相应值;每个坐标的设置和读取方法;abstract void draw(Graphics g)方法。MyLine类负责画直线,实现父类的draw方法;MyRectangle负责画矩形,实现父类的draw方法;MyOval负责画椭圆,实现父类的draw方法。编写一个应用程序,使用上面定义的类,随机选取位置和形状,绘制20个图形。示例输出如图所示。
在这里插入图片描述代码:

import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
import java.util.Random;
abstract class MyShape{
   private double x1,y1,x2,y2;
   public MyShape(){
      x1=y1=x2=y2=0;
   }
   public MyShape(double a,double b,double c,double d){
      x1=a;y1=b;x2=c;y2=d;
   }
   //获取坐标方法
   public double getx1(){
      return x1;
   }
   public double getx2(){
      return x2;
   }
   public double gety1(){
      return y1;
   }
   public double gety2(){
      return y2;
   }
   //设置坐标方法
   public void setx1(double a){
      x1=a;
   }
   public void setx2(double a){
      x2=a;
   }
   public void sety1(double a){
      y1=a;
   }
   public void sety2(double a){
      y2=a;
   }
   //抽象方法draw
   abstract void draw(Graphics g);
}
class MyLine extends MyShape{
   public MyLine(double a,double b,double c,double d){
      super(a,b,c,d);
   }
   public void draw(Graphics g){
      Graphics2D g2 = (Graphics2D)g;
      Line2D xy=new Line2D.Double();
      xy.setLine(getx1(),gety1(),getx2(),gety2());
      g2.draw(xy);
   }
}
class MyRectangle extends MyShape{
   public MyRectangle(double a,double b,double c,double d){
      super(a,b,c,d);
   }
   public void draw(Graphics g){
      Graphics2D g2 = (Graphics2D)g;
      Rectangle2D xy=new Rectangle2D.Double();
      xy.setRect(getx1(), gety1(),Math.abs(getx2()-getx1()) ,Math.abs(gety2()-gety1()) );
      g2.draw(xy);
   }
   
}
class MyOval extends MyShape{
   public MyOval(double a,double b,double c,double d){
      super(a,b,c,d);
   }
   public void draw(Graphics g){
      Graphics2D g2 = (Graphics2D)g;
      Ellipse2D xy=new Ellipse2D.Double();
      xy.setFrame(getx1(), gety1(),Math.abs(getx2()-getx1()) ,Math.abs(gety2()-gety1()) );
      g2.draw(xy);
   }
   
}
class drawall extends JComponent{
   public void paintComponent(Graphics g){
      // super.paintComponent(g);
      MyShape rs;
      for(int i=1;i<=20;i++)     //画20个图形
      {
         Random nd=new Random();
         int op=nd.nextInt(3);       //0、1、2对应直线、矩形、椭圆
         // double x1=nd.nextDouble(600),y1=nd.nextDouble((Double)600.0),x2=nd.nextDouble((Double)600.0),y2=nd.nextDouble((Double)600.0);
         double x1 = Math.random() * 600 % 601;
         double y1 = Math.random() * 600 % 601;
         double x2 = Math.random() * 600 % 601;
         double y2 = Math.random() * 600 % 601;
         if(op==0){
            rs=new MyLine(x1,y1,x2,y2);
            rs.draw(g);
         }
         else if(op==1){
            rs=new MyRectangle(x1,y1,x2,y2);
            rs.draw(g);
         }
         else{
            rs=new MyOval(x1,y1,x2,y2);
            rs.draw(g);
         }
      }
   }
}
class mjf extends JFrame{
   public mjf(){
      add(new drawall());
      // pack();
   }
}
public class Main {
   public static void main(String[] args) {
      mjf jf=new mjf();
      jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      jf.setTitle("f(x)=x^2函数图像的绘制");
      jf.setVisible(true);
      jf.setSize(800,600);
   }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值