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画图(直线,矩形,椭圆),并显示其周长面积相关推荐

  1. java画出斜椭圆_【转】画图java源代码,只画直线,矩形,椭圆

    /* *只画直线,矩形,椭圆,只能向右下角画 * *PainterPanel extends JPanel implements MouseListener *addMouseListener(thi ...

  2. java 画图 graphics

    发现用 java 画图特别麻烦,跟其他不少软件的画图功能区别很大,这可能跟 java 面向项目开发有关, 需要加载一堆东西. 一般情况下,画图时有三个步骤: 1. 定义一个 JFrame, 它定义了图 ...

  3. Java黑皮书课后题第8章:*8.32(几何:三角形面积)编写一个方法,使用下面的方法头,返回一个三角形的面积。编写一个程序,提示用户输入三角形的三个点,然后显示三角形的面积

    *8.32(几何:三角形面积)编写一个方法,使用下面的方法头,返回一个三角形的面积.编写一个程序,提示用户输入三角形的三个点,然后显示三角形的面积 题目 题目描述与运行示例 破题 代码 题目 题目描述 ...

  4. Java黑皮书课后题第4章:*4.5(几何:正多边形的面积)正多边形是一个具有n条边的多边形,它每条边的长度都相等,而且所有角的度数也相等。编写程序,提示用户数输入边个数和边长,然后显示它的面积

    *4.5(几何:正多边形的面积)正多边形是一个具有n条边的多边形,它每条边的长度都相等,而且所有角的度数也相对.编写程序,提示用户数输入边个数和边长,然后显示它的面积 题目 题目概述 运行示例 代码 ...

  5. Java黑皮书课后题第2章:*2.19(几何:三角形面积)编写程序,提示用户输入三角形的三个点(x1, y1)(x2, y2)(x3, y3),然后显示它的面积

    *2.19(几何:三角形面积)编写程序,提示用户输入三角形的三个点横纵坐标值,然后显示它的面积 题目 题目概述 运行示例 思路 代码 如何用嵌套的pow()写出两点距离公式 题目 题目概述 2.19( ...

  6. 编写Java程序,在屏幕上显示带标题的窗口,并添加一个按钮。当用户单击按钮时,结束程序。

    编写Java程序,在屏幕上显示带标题的窗口,并添加一个按钮.当用户单击按钮时,结束程序. package p3;import java.awt.event.ActionEvent; import ja ...

  7. Java黑皮书课后题第4章:4.4(几何:六边形面积)六边形面积可以通过下面公式计算(s是边长) 编写程序,提示用户输入六边形的边长,然后显示它的面积

    4.4(几何:六边形面积)六边形面积可以通过下面公式计算(s是边长) 编写程序,提示用户输入六边形的边长,然后显示它的面积 题目 题目概述 运行示例 破题 代码 题目 题目概述 4.4(几何:六边形面 ...

  8. Java黑皮书课后题第2章:2.16(几何:六边形面积)编写程序,提示用户输入六边形边长,然后显示它的面积

    2.16(几何:六边形面积)编写程序,提示用户输入六边形边长,然后显示它的面积 题目 题目描述 运行示例 代码 题目 题目描述 2.16(几何:六边形面积)编写程序,提示用户输入六边形边长,然后显示它 ...

  9. java如何在窗口上显示数据_如何把Java程序窗口在屏幕中间显示

    摘要:这篇Java开发技术栏目下的"如何把Java程序窗口在屏幕中间显示",介绍的技术点是"Java程序.屏幕中间.Java.显示.窗口.中间",希望对大家开发 ...

最新文章

  1. 浙江科技学院计算机专业录取分数线,浙江科技学院2017年艺术类本科专业录取分数线...
  2. 微信小程序码buffer转为图片php,微信小程序将网络图片转成base64数据
  3. 两个服务之间的调用请求
  4. LF模式是个坑,ZeroIce中间件让你体会这个痛
  5. python中缩进在程序中_python代码缩进
  6. 统计学习方法-李航(1)
  7. 带你自学Python系列(十五):Python中类的用法(一)
  8. Win10磁盘占用100%的解决办法
  9. 伊对和连信交友相亲聊天平台靠谱吗?
  10. Maven父子项目的理解
  11. 百度鹰眼服务平台部署教程
  12. 【Oracle】userenv()函数介绍分析
  13. 计算机网络知识点及例题总结(五)数据链路层与局域网
  14. 郑州大学计算机系1996级校友,公共管理学院成功举办96级公共关系专业学生毕业20周年返校活动...
  15. 痞子衡嵌入式:ARM Cortex-M内核那些事(5)- 一表搜罗指令集
  16. 谷歌浏览器被hao123网页(或其他网页)劫持了,怎么办?(已解决)
  17. 使用自己的微信账号登录掘金社区
  18. 关于webWorker的理解和简单例子
  19. 题目二:课程设计报告
  20. LWN: 华为EROFS文件系统

热门文章

  1. InDesign 教程:如何将图形添加到项目?
  2. AVR单片机开发4——定时器T0 中断方式
  3. 【FPGA实验】VGA显示
  4. h0060. 哥德巴赫猜想
  5. 强大的视频播放器 KMPlayer 简单使用
  6. 【高软作业2】:三种美图类软件的调研分析
  7. 《数学建模:基于R》一一1.7 数学建模案例分析——食品质量安全抽检数据分析...
  8. Dreambox的enigma和enigma2,一些想法。
  9. 分页存储的地址空间是一维的,分段存储的地址空间是二维的
  10. js 获取明天的日期