Shape类中
import java.awt.Color;
import java.awt.Graphics;
/*
* 顶级形状类
*/
public abstract class Shape {
//坐标
public int x1,x2,y1,y2;
//颜色
public Color color;
//构造方法
public Shape(int x1,int y1,int x2,int y2,Color color){ this.x1=x1;
this.y1=y1;
this.x2=x2;
this.y2=y2;
this.color=color;
}
//抽象画图方法
public abstract void draw(Graphics g);
}
//构造方法
public Shape(int x1,int y1,int x2,int y2,Color color){ this.x1=x1;
this.y1=y1;
this.x2=x2;
this.y2=y2;
this.color=color;
}
MyMouseListener类中
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
/*
* 自定义鼠标监听类,继承MouseAdapter(或实现了MouseListener、MouseMotionListener)
*/
public class MyMouseListener extends MouseAdapter{
private int x1,y1,x2,y2;
private Graphics g;
private ToolPanel tool_panel;
private ColorPanel color_panel;
private Color color;
private String command;
//构造方法
public MyMouseListener(ToolPanel tool_panel,ColorPanel color_panel,DrawPanel draw_panel){
g=draw_panel.getGraphics();//获取画布
this.tool_panel=tool_panel;//接收对象
this.color_panel=color_panel;//接收对象
}
//按下
public void mousePressed(MouseEvent e){
x1=e.getX();
y1=e.getY();
command=tool_panel.getCommand();//获取标志
color=color_panel.getColor();//获取颜色
g.setColor(color);//设置画布的颜色
}
//释放
public void mouseReleased(MouseEvent e){
x2=e.getX();
y2=e.getY();
if("line".equals(command)){
Line line=new Line(x1,y1,x2,y2,color); line.draw(g);
}
else if("rect".equals(command)){
Rect rect=new Rect(x1,y1,x2,y2,color); rect.draw(g);
}
else if("oval".equals(command)){
Oval oval=new Oval(x1,y1,x2,y2,color); oval.draw(g);
}
}
//拖拽
public void mouseDragged(MouseEvent e){
x2=e.getX();
y2=e.getY();
Line line=new Line(x1,y1,x2,y2,color);
line.draw(g);
x1=x2;
y1=y2;
}
}
if("line".equals(command)){
Line line=new Line(x1,y1,x2,y2,color); line.draw(g);
}
else if("rect".equals(command)){
Rect rect=new Rect(x1,y1,x2,y2,color); rect.draw(g);
}
else if("oval".equals(command)){
Oval oval=new Oval(x1,y1,x2,y2,color); oval.draw(g);
}
Line类中
import java.awt.Color;
import java.awt.Graphics;
public class Line extends Shape{
//构造方法
public Line(int x1,int y1,int x2,int y2,Color color){
super(x1,y1,x2,y2,color);//调用父类的构造方法
}
//实现抽象画图方法 画直线
public void draw(Graphics g){
g.setColor(color);
g.drawLine(x1,y1,x2,y2);
}
}
//构造方法
public Line(int x1,int y1,int x2,int y2,Color color){
super(x1,y1,x2,y2,color);//调用父类的构造方法
}
Rect类中
import java.awt.Color;
import java.awt.Graphics;
public class Rect extends Shape{
//构造方法
public Rect(int x1,int y1,int x2,int y2,Color color){
super(x1,y1,x2,y2,color);
}
//实现父类的抽象方法
public void draw(Graphics g){
g.setColor(color);
g.drawRect(Math.min(x1,x2), Math.min(y1, y2), Math.abs(x1-x2), Math.abs(y1-y2));
}
}
public Rect(int x1,int y1,int x2,int y2,Color color){
super(x1,y1,x2,y2,color);Oval类中
import java.awt.Color;
import java.awt.Graphics;
public class Oval extends Shape{
//构造方法
public Oval(int x1,int y1,int x2,int y2,Color color){
super(x1,y1,x2,y2,color);//调用直接父类的构造方法
}
//实现抽象方法类 画椭圆
public void draw(Graphics g){
g.setColor(color);
g.drawOval(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x1-x2),Math.abs(y2-y2));
}
}
//构造方法
public Oval(int x1,int y1,int x2,int y2,Color color){
super(x1,y1,x2,y2,color);//调用直接父类的构造方法
}
这几个类中的构造方法中的参数的传参顺序:MyMouseListener类中的x1,y1,x2,y2,color 传到Line类,Rect类,Oval类中的构造方法中,然后,传到Shape类中的构造方法中。
分享到:
相关推荐
7.6 使用类的实例作为方法参数 172 7.6.1 超车方法:使用类实例做参数 172 7.6.2 调用这个方法 173 7.6.3 发生了什么 174 7.7 加餐:局部变量和实例变量 175 7.7.1 什么是局部变量(Local Variable) 175 ...
7.6 使用类的实例作为方法参数 172 7.6.1 超车方法:使用类实例做参数 172 7.6.2 调用这个方法 173 7.6.3 发生了什么 174 7.7 加餐:局部变量和实例变量 175 7.7.1 什么是局部变量(Local Variable) 175 ...
JavaScript 对大小写敏感 15 空格 15 换行 15 第二章JavaScript对象 1. JavaScript对象简介 15 (1) JavaScript对象也是有属性和方法的 15 对象属性的使用 15 对象方法的使用 15 (2) 对象的定义与实例...
9.3 以传引用的方式向方法传递参数 9.4 向方法传递可变数量的参数 9.5 参数和返回类型的指导原则 9.6 常量性 第10章 属性 10.1 无参属性 10.1.1 自动实现的属性 10.1.2 合理定义属性 10.1.3 对象和集合初始...
方法在类或结构中声明,声明时需要制定访问级别、返回值、方法名称及方法参数。一个方法的签名由它的名称以及它的形参的个数、修饰符和类型组成。方法的签名是方法的唯一标识(同一个类中的区别标识)。 方法的重载:...
Lagrange插值通过给定的数据点构造一个插值多项式,确保在数据点上经过这些点。插值多项式的阶数可以通过调整参数进行控制,不同阶数的插值多项式可以对数据点进行不同程度的拟合。Newton插值使用差商来构建插值...
以上类中属性和方法的访问权限自行确定,方法和构造方法若有参数,也自行确定 。 实验代码: public class Rectangle { int Length; int Width; public int getLength() { return Length; } public void setLength...
9.3 以传引用的方式向方法传递参数 9.4 向方法传递可变数量的参数 9.5 参数和返回类型的指导原则 9.6 常量性 第10章 属性 10.1 无参属性 10.1.1 自动实现的属性 10.1.2 合理定义属性 10.1.3 对象和集合初始...
9.3 以传引用的方式向方法传递参数 9.4 向方法传递可变数量的参数 9.5 参数和返回类型的指导原则 9.6 常量性 第10章 属性 10.1 无参属性 10.1.1 自动实现的属性 10.1.2 合理定义属性 10.1.3 对象和集合初始...
9.3 以传引用的方式向方法传递参数 9.4 向方法传递可变数量的参数 9.5 参数和返回类型的指导原则 9.6 常量性 第10章 属性 10.1 无参属性 10.1.1 自动实现的属性 10.1.2 合理定义属性 10.1.3 对象和集合初始...
class.newInstance()内部其实就是在用默认的构造方法 ----------------------- 讲Method //方法 Method charAt = Class.forName("java.lang.String").getMethod("charAt", int.class); System.out.println...
时间久了就容易记不清了,特留存备用查看 ...—–基类无/有默认构造函数时,在子类构造函数初始化列表处调用,则显示调用 基类类名(参数) class Base { public: Base(int b) : m_b(b) { } private: int m_b
3.3 构造函数 60 3.4 结构 65 3.5 部分类 68 3.6 内容总结 72 3.7 独立实践 72 4 继承 73 4.1 继承的类型 73 4.2 结构和类 75 4.3 调用函数的基类版本 76 4.4 抽象类和抽象函数 77 4.5 密封类和密封方法 79 4.6 修饰...
" "SIMULINK可用于仿真试验,在这个环境中,无需书写大量程序,只需直观简单的鼠标操作 " ",选取适当的库模块,就可构造出复杂的仿真模型。 " ----------------------- matlab实验报告(实验6)全文共3页,当前为第1...
C#静态成员和方法的学习小结 C#中结构与类的区别 C#中 const 和 readonly 的区别 利用自定义属性,定义枚举值的详细文本 Web标准和ASP.NET - 第一部分 XHTML介绍 在ASP.NET页面中推荐使用覆写(Override)而不是事件...
python中email模块使得处理邮件变得比较简单,今天着重学习了一下发送邮件的具体做法,这里写写自己的的心得,也请高手给些指点。 一、相关模块介绍 发送邮件主要用到了smtplib和email两个模块,这里首先就两个模块...
2.1.2电阻器的种类和主要参数 1.电阻器的种类 根据构造,电阻可分为以下几类: 定值电阻:以带电阻物质或线圈构成、且不会因任何环境或人为因素而变量的电阻。 现时常见的定值电阻有颜色条纹用以识别电阻值、误差等...
JAVA程序设计 课程设计报告 课 题: ...用于" " " "存放表 " " "TableModel tm "自定义一个表模型,用于" " " "更新表数据 " " "public StuQuery(Frame "构造方法,通过传递三个" " "Main,String title ,boolean "参数
JAVA程序设计 课程设计报告 课 题: ...用于" " " "存放表 " " "TableModel tm "自定义一个表模型,用于" " " "更新表数据 " " "public StuQuery(Frame "构造方法,通过传递三个" " "Main,String title ,boolean "参数
JAVA程序设计 课程设计报告 课 题: ...用于" " " "存放表 " " "TableModel tm "自定义一个表模型,用于" " " "更新表数据 " " "public StuQuery(Frame "构造方法,通过传递三个" " "Main,String title ,boolean "参数