Java画图(直线,矩形,椭圆),并显示其周长面积
Shape类 父类
package com.lovoinfo.shape;import java.awt.Color;
import java.awt.Graphics;
/*** 图形(抽象类,不能实例化)* @author Administrator**/
public abstract class Shape {protected int startX,startY;//起点横纵坐标protected int endX,endY;//终点横纵坐标protected Color color;public void setColor(Color color) {this.color = color;}/*** 绘图(抽象方法留给子类重写)* @param g 画笔*/public abstract void draw(Graphics g);public abstract void calculate(Graphics g);public int getStartX() {return startX;}public void setStartX(int startX) {this.startX = startX;}public int getStartY() {return startY;}public void setStartY(int startY) {this.startY = startY;}public int getEndX() {return endX;}public void setEndX(int endX) {this.endX = endX;}public int getEndY() {return endY;}public void setEndY(int endY) {this.endY = endY;}}
定义子类
Rectangle
Oval
Line
package com.lovoinfo.shape;import java.awt.Graphics;public class Rectangle extends Shape {private int width;private int height;private String s;@Overridepublic void draw(Graphics g) {g.setColor(color);width= Math.abs(endX-startX);height=Math.abs(endY-startY);int x1=startX<endX?startX:endX;int y1=startY<endY?startY:endY;g.drawRect(x1, y1, width, height);}@Overridepublic void calculate(Graphics g) {s="此图为矩形"+"矩形周长为:"+2*(width+height)+"面积为:"+width*height;g.drawString(s, 100,100 );}}
package com.lovoinfo.shape;import java.awt.Graphics;public class Oval extends Shape{private static final double PI = 3.14;private String s;private int width;private int height;@Overridepublic void draw(Graphics g) {g.setColor(color);width= Math.abs(endX-startX);height=Math.abs(endY-startY);int x1=startX<endX?startX:endX;int y1=startY<endY?startY:endY;g.drawOval(x1, y1, width, height);}@Overridepublic void calculate(Graphics g) {double a=width/2;double b=height/2;s="此图为椭圆:"+"面积为:"+PI *a*b+"周长为:"+2*PI*b+4*(Math.abs(a-b));g.drawString(s, 100, 100);}}
package com.lovoinfo.shape;import java.awt.Graphics;public class Line extends Shape {private String s;@Overridepublic void draw(Graphics g) {g.setColor(color);g.drawLine(startX,startY, endX, endY);}@Overridepublic void calculate(Graphics g) {s="此图为直线"+"长度为:"+Math.sqrt((startX-endX)*(startX-endX)+(startY-endY)*(startY-endY));g.drawString(s, 100, 100);}}
工具类
产生直线椭圆矩形坐标随机数
package com.lovoinfo.util;import java.awt.Color;
/*** 工具类:第一:加上final,让这个类不能被继承* 第二:构造器私有,让别人只能以对象加点调用方法* @author Administrator**/
public final class MyUtil {private MyUtil(){}/*** 产生指定范围的随机整数* @param min 最小值(闭区间)* @param max 最大值(闭区间)* @return 指定范围的随机整数*/public static int random(int min,int max){return (int) (Math.random()*(max-min+1)+min);}public static Color randomColor(){int r=random(0,255);int g=random(0,255);int b=random(0,255);return new Color(r,g,b);}}
UI
package com.lovoinfo.ui;import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JFrame;import com.lovoinfo.shape.Line;
import com.lovoinfo.shape.Oval;
import com.lovoinfo.shape.Rectangle;
import com.lovoinfo.shape.Shape;
import com.lovoinfo.util.MyUtil;@SuppressWarnings("serial")
public class MyFrame extends JFrame {private class ButtonHandler implements ActionListener{@Overridepublic void actionPerformed(ActionEvent e) {String command=e.getActionCommand();if(command.equals("Line")){shape=new Line();}else if(command.equals("Oval")){shape=new Oval();}else{shape=new Rectangle();}shape.setStartX(MyUtil.random(0, 1000));shape.setStartY(MyUtil.random(0, 600));shape.setEndX(MyUtil.random(0, 1000));shape.setEndY(MyUtil.random(0, 600));// shape.setColor(MyUtil.randomColor());shape.setColor(Color.black);repaint();}}private JButton lineButton;private JButton ovalButton;private JButton recButton;// private Line line = null;
// private Rectangle rec = null;
// private Oval oval = null;private Shape shape=null;public MyFrame() {this.setSize(1000, 600);this.setTitle("绘图窗口");// super.setTitle("我的第一个窗口");this.setResizable(false);this.setLocationRelativeTo(null);// 窗口居中this.setDefaultCloseOperation(EXIT_ON_CLOSE);// 设置默认的关闭操作lineButton = new JButton("Line");ovalButton = new JButton("Oval");recButton = new JButton("Rectangle");
// recButton.addActionListener(new ActionListener() {//
// @Override
// public void actionPerformed(ActionEvent e) {// rec = new Rectangle();
// rec.setStartX(MyUtil.random(0, 1000));
// rec.setStartY(MyUtil.random(0, 600));
// rec.setEndX(MyUtil.random(0, 1000));
// rec.setEndY(MyUtil.random(0, 600));
// repaint();
//
// }
// });// ovalButton.addActionListener(new ActionListener() {//
// @Override
// public void actionPerformed(ActionEvent e) {// oval = new Oval();
// oval.setStartX(MyUtil.random(0, 1000));
// oval.setStartY(MyUtil.random(0, 600));
// oval.setEndX(MyUtil.random(0, 1000));
// oval.setEndY(MyUtil.random(0, 600));
// repaint();
//
// }
// });
// lineButton.addActionListener(new ActionListener() {// /**
// * 点击按钮后要执行的方法
// */
// @Override
// public void actionPerformed(ActionEvent e) {//
// line = new Line();
// line.setStartX(MyUtil.random(0, 1000));
// line.setStartY(MyUtil.random(0, 600));
// line.setEndX(MyUtil.random(0, 1000));
// line.setEndY(MyUtil.random(0, 600));
//
// repaint();
// }
// });// 需要放一个Action监听器ActionListener handler=new ButtonHandler();lineButton.addActionListener(handler);ovalButton.addActionListener(handler);recButton.addActionListener(handler);this.setLayout(new FlowLayout());// 设置流式布局管理器this.add(lineButton);this.add(ovalButton);this.add(recButton);}@Overridepublic void paint(Graphics g) {super.paint(g);if(shape!=null){shape.draw(g);shape.calculate(g);}
// if (line != null) {// line.draw(g);
// }
// if (rec != null) {// rec.draw(g);
// }
// if (oval != null) {// oval.draw(g);
// }}
}
测试类
package com.lovoinfo.ui;import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JFrame;import com.lovoinfo.shape.Line;
import com.lovoinfo.shape.Oval;
import com.lovoinfo.shape.Rectangle;
import com.lovoinfo.shape.Shape;
import com.lovoinfo.util.MyUtil;@SuppressWarnings("serial")
public class MyFrame extends JFrame {private class ButtonHandler implements ActionListener{@Overridepublic void actionPerformed(ActionEvent e) {String command=e.getActionCommand();if(command.equals("Line")){shape=new Line();}else if(command.equals("Oval")){shape=new Oval();}else{shape=new Rectangle();}shape.setStartX(MyUtil.random(0, 1000));shape.setStartY(MyUtil.random(0, 600));shape.setEndX(MyUtil.random(0, 1000));shape.setEndY(MyUtil.random(0, 600));// shape.setColor(MyUtil.randomColor());shape.setColor(Color.black);repaint();}}private JButton lineButton;private JButton ovalButton;private JButton recButton;// private Line line = null;
// private Rectangle rec = null;
// private Oval oval = null;private Shape shape=null;public MyFrame() {this.setSize(1000, 600);this.setTitle("绘图窗口");// super.setTitle("我的第一个窗口");this.setResizable(false);this.setLocationRelativeTo(null);// 窗口居中this.setDefaultCloseOperation(EXIT_ON_CLOSE);// 设置默认的关闭操作lineButton = new JButton("Line");ovalButton = new JButton("Oval");recButton = new JButton("Rectangle");
// recButton.addActionListener(new ActionListener() {//
// @Override
// public void actionPerformed(ActionEvent e) {// rec = new Rectangle();
// rec.setStartX(MyUtil.random(0, 1000));
// rec.setStartY(MyUtil.random(0, 600));
// rec.setEndX(MyUtil.random(0, 1000));
// rec.setEndY(MyUtil.random(0, 600));
// repaint();
//
// }
// });// ovalButton.addActionListener(new ActionListener() {//
// @Override
// public void actionPerformed(ActionEvent e) {// oval = new Oval();
// oval.setStartX(MyUtil.random(0, 1000));
// oval.setStartY(MyUtil.random(0, 600));
// oval.setEndX(MyUtil.random(0, 1000));
// oval.setEndY(MyUtil.random(0, 600));
// repaint();
//
// }
// });
// lineButton.addActionListener(new ActionListener() {// /**
// * 点击按钮后要执行的方法
// */
// @Override
// public void actionPerformed(ActionEvent e) {//
// line = new Line();
// line.setStartX(MyUtil.random(0, 1000));
// line.setStartY(MyUtil.random(0, 600));
// line.setEndX(MyUtil.random(0, 1000));
// line.setEndY(MyUtil.random(0, 600));
//
// repaint();
// }
// });// 需要放一个Action监听器ActionListener handler=new ButtonHandler();lineButton.addActionListener(handler);ovalButton.addActionListener(handler);recButton.addActionListener(handler);this.setLayout(new FlowLayout());// 设置流式布局管理器this.add(lineButton);this.add(ovalButton);this.add(recButton);}@Overridepublic void paint(Graphics g) {super.paint(g);if(shape!=null){shape.draw(g);shape.calculate(g);}
// if (line != null) {// line.draw(g);
// }
// if (rec != null) {// rec.draw(g);
// }
// if (oval != null) {// oval.draw(g);
// }}
}
Java画图(直线,矩形,椭圆),并显示其周长面积相关推荐
- java画出斜椭圆_【转】画图java源代码,只画直线,矩形,椭圆
/* *只画直线,矩形,椭圆,只能向右下角画 * *PainterPanel extends JPanel implements MouseListener *addMouseListener(thi ...
- java 画图 graphics
发现用 java 画图特别麻烦,跟其他不少软件的画图功能区别很大,这可能跟 java 面向项目开发有关, 需要加载一堆东西. 一般情况下,画图时有三个步骤: 1. 定义一个 JFrame, 它定义了图 ...
- Java黑皮书课后题第8章:*8.32(几何:三角形面积)编写一个方法,使用下面的方法头,返回一个三角形的面积。编写一个程序,提示用户输入三角形的三个点,然后显示三角形的面积
*8.32(几何:三角形面积)编写一个方法,使用下面的方法头,返回一个三角形的面积.编写一个程序,提示用户输入三角形的三个点,然后显示三角形的面积 题目 题目描述与运行示例 破题 代码 题目 题目描述 ...
- Java黑皮书课后题第4章:*4.5(几何:正多边形的面积)正多边形是一个具有n条边的多边形,它每条边的长度都相等,而且所有角的度数也相等。编写程序,提示用户数输入边个数和边长,然后显示它的面积
*4.5(几何:正多边形的面积)正多边形是一个具有n条边的多边形,它每条边的长度都相等,而且所有角的度数也相对.编写程序,提示用户数输入边个数和边长,然后显示它的面积 题目 题目概述 运行示例 代码 ...
- Java黑皮书课后题第2章:*2.19(几何:三角形面积)编写程序,提示用户输入三角形的三个点(x1, y1)(x2, y2)(x3, y3),然后显示它的面积
*2.19(几何:三角形面积)编写程序,提示用户输入三角形的三个点横纵坐标值,然后显示它的面积 题目 题目概述 运行示例 思路 代码 如何用嵌套的pow()写出两点距离公式 题目 题目概述 2.19( ...
- 编写Java程序,在屏幕上显示带标题的窗口,并添加一个按钮。当用户单击按钮时,结束程序。
编写Java程序,在屏幕上显示带标题的窗口,并添加一个按钮.当用户单击按钮时,结束程序. package p3;import java.awt.event.ActionEvent; import ja ...
- Java黑皮书课后题第4章:4.4(几何:六边形面积)六边形面积可以通过下面公式计算(s是边长) 编写程序,提示用户输入六边形的边长,然后显示它的面积
4.4(几何:六边形面积)六边形面积可以通过下面公式计算(s是边长) 编写程序,提示用户输入六边形的边长,然后显示它的面积 题目 题目概述 运行示例 破题 代码 题目 题目概述 4.4(几何:六边形面 ...
- Java黑皮书课后题第2章:2.16(几何:六边形面积)编写程序,提示用户输入六边形边长,然后显示它的面积
2.16(几何:六边形面积)编写程序,提示用户输入六边形边长,然后显示它的面积 题目 题目描述 运行示例 代码 题目 题目描述 2.16(几何:六边形面积)编写程序,提示用户输入六边形边长,然后显示它 ...
- java如何在窗口上显示数据_如何把Java程序窗口在屏幕中间显示
摘要:这篇Java开发技术栏目下的"如何把Java程序窗口在屏幕中间显示",介绍的技术点是"Java程序.屏幕中间.Java.显示.窗口.中间",希望对大家开发 ...
最新文章
- 浙江科技学院计算机专业录取分数线,浙江科技学院2017年艺术类本科专业录取分数线...
- 微信小程序码buffer转为图片php,微信小程序将网络图片转成base64数据
- 两个服务之间的调用请求
- LF模式是个坑,ZeroIce中间件让你体会这个痛
- python中缩进在程序中_python代码缩进
- 统计学习方法-李航(1)
- 带你自学Python系列(十五):Python中类的用法(一)
- Win10磁盘占用100%的解决办法
- 伊对和连信交友相亲聊天平台靠谱吗?
- Maven父子项目的理解
- 百度鹰眼服务平台部署教程
- 【Oracle】userenv()函数介绍分析
- 计算机网络知识点及例题总结(五)数据链路层与局域网
- 郑州大学计算机系1996级校友,公共管理学院成功举办96级公共关系专业学生毕业20周年返校活动...
- 痞子衡嵌入式:ARM Cortex-M内核那些事(5)- 一表搜罗指令集
- 谷歌浏览器被hao123网页(或其他网页)劫持了,怎么办?(已解决)
- 使用自己的微信账号登录掘金社区
- 关于webWorker的理解和简单例子
- 题目二:课程设计报告
- LWN: 华为EROFS文件系统