当前位置: 首页 > news >正文

Java 实现随机图形

要求

定义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.util.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;abstract class MyShape{int x = 0;int y = 0;int z = 0;int k = 0;public MyShape(){;}public abstract void draw(Graphics g);
}class MyLine extends MyShape{Random rd = new Random();@Overridepublic void draw(Graphics g){g.drawLine(x,y,z,k);}public MyLine(){int _x = rd.nextInt(200);int _y = rd.nextInt(200);int _z = rd.nextInt(200);int _k = rd.nextInt(200);x = _x;y = _y;z = _z;k = _k;}
}class MyRectangle extends MyShape{Random rd = new Random();@Overridepublic void draw(Graphics g){g.drawRect(x,y,z,k);}public MyRectangle(){int _x = rd.nextInt(200);int _y = rd.nextInt(200);int _z = rd.nextInt(200);int _k = rd.nextInt(200);x = _x;y = _y;z = _z;k = _k;}
}class MyOval extends MyShape{Random rd = new Random();@Overridepublic void draw(Graphics g){g.drawOval(x,y,z,k);}public MyOval(){int _x = rd.nextInt(200);int _y = rd.nextInt(200);int _z = rd.nextInt(200);int _k = rd.nextInt(200);x = _x;y = _y;z = _z;k = _k;}
}class DrawComponent extends JComponent
{@Overridepublic void paintComponent(Graphics g){for(int i=0;i<20;i++) {if(i<6) {MyOval mo = new MyOval();mo.draw(g);}else if(i<12) {MyRectangle mr = new MyRectangle();mr.draw(g);}else {MyLine ml = new MyLine();ml.draw(g);}}}
}class Game extends JFrame{Random rd = new Random();public Game(){this.add(new DrawComponent());this.setSize(600,600);this.setTitle("Graphics");this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setLocationRelativeTo(null);this.setVisible(true);}
}public class Main1{public static void main(String [] args){new Game();}
}

代码分析

  • 使用抽象类
  • 覆写draw方法来绘画
  • 自定一个JComponent来调用各类的绘画方法
http://www.lryc.cn/news/235653.html

相关文章:

  • java 读写文件的代码。
  • 如何使用贝锐花生壳内网穿透远程访问JupyterNotebook?
  • 文本向量化
  • java--贪吃蛇
  • 录制第一个jmeter性能测试脚本2(http协议)
  • pip命令大全
  • Redis篇---第二篇
  • 【LeetCode刷题日志】232.用栈实现队列
  • 单元测试实战(二)Service 的测试
  • LabVIEW和NIUSRP硬件加快了认知无线电开发
  • 嵌入式软件工程师面试题——2025校招社招通用(十六)
  • 白盒测试之测试用例设计方法
  • 在CentOS 7上关闭SELinux
  • 基于单片机温湿度PM2.5报警系统
  • OpenHarmony系统编译环境
  • 二十三种设计模式全面解析-职责链模式(Chain of Responsibility Pattern):解放代码责任链,提升灵活性与可维护性
  • 通过制作llama_cpp的docker镜像在内网离线部署运行大模型
  • JavaScript 异步编程
  • linux课程第一课------命令的简单的介绍
  • XLua热更新框架原理和代码实战
  • Hive客户端hive与beeline的区别
  • <MySQL> 什么是数据库索引?数据库索引的底层结构是什么?
  • 对于koa中间件的理解
  • 分页文件pagefile.sys引出的疑问
  • 【开题报告】疫苗在线预约小程序的设计与实现
  • 【深度学习实验】注意力机制(二):掩码Softmax 操作
  • idea运行项目之后一直卡在Writing classes… 解决方案
  • CentOS7 安装mysql8(离线安装)postgresql14(在线安装)
  • 使用vant list实现订单列表,支持下拉加载更多
  • OpenCV快速入门:图像形态学操作