`
Java.天道2011
  • 浏览: 9453 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

画板小结(1)

阅读更多
要制作一个画板可以分为制作画板界面、制作绘制形状的方法(以绘制直线为例)、制作鼠标监听器、制作保存绘制形状的队列、重绘五个部分,下面会依次做解释。
一、制作画板界面
既然是一个画板,那么最基础的就是得有一个画板界面,而一个画板界面则须包括界面的大小、标题、绘制形状功能的按钮(以画直线为例)
/**
 * 画板的界面类,继承JFrame类
 * 
 *
 */
public class MyDrawUI extends javax.swing.JFrame {
	//程序入口
	public static void main(String [] asd){
		//创建一个窗体对象
		MyDrawUI MDU = new MyDrawUI();
		//调用显示画板窗体的方法
		MDU.initUI();	
	}
/**
 * 定义初始化画板窗体的方法
 */
public void initUI(){
	//设置画板窗体的标题
	this.setTitle("全能画板");
	//设置画板窗体的大小
	this.setSize(600,600);
	//设置画板窗体隐藏时关闭程序
	this.setDefaultCloseOperation(3);
	//创建一个布局对象
	java.awt.FlowLayout jl = new java.awt.FlowLayout();
	//设置窗体为流式布局
	this.setLayout(jl);
	//创建直线按钮和圆和矩形按钮
	javax.swing.JButton line = new javax.swing.JButton("line");
	//将按钮添加到窗体上
	this.add(line);
	//设置画板窗体可见
	this.setVisible(true);
	//调用获取画布对象的方法
	java.awt.Graphics g2 = this.getGraphics();
}
这样一个简单的画板界面就制作好了
二、制作绘制形状的方法
所有的形状子类都是继承了父类MyShape
/**
 * 形状父类,用于被其他子类继承
 * 
 *
 */
public abstract class MyShape {
	/**
	 * 定义形状的颜色属性
	 */
	private java.awt.Color color;
	/**
	 * 定义画形状的方法
	 * @param g:画布对象
	 */
	public abstract void Draw(java.awt.Graphics g);
	/**
	 * 定义设置颜色的方法
	 * @param color:得到的颜色对象
	 */
	public void setcolor(java.awt.Color color){
		this.color = color;
	}
	/**
	 * 定义得到颜色的方法
	 * @return:返回颜色值
	 */
	public java.awt.Color getcolor(){
		return color;
	}
}

/**
 * 定义一个直线子类,继承父类MyShape
 * 
 *
 */
public class MyLine extends MyShape {
	private int x1,y1,x2,y2;
	/**
	 * 定义画直线的方法
	 * @param x1
	 * @param y1
	 * @param x2
	 * @param y2
	 */
	public  MyLine(int x1,int y1,int x2,int y2){
		this.x1 = x1;
		this.y1 = y1;
		this.x2 = x2;
		this.y2 = y2;
	}
	/**
	 * 重写父类中画形状的方法
	 */
	@Override
	public void Draw(java.awt.Graphics g) {
		/**
		 * 得到颜色
		 */
		java.awt.Color color = this.getcolor();
		/**
		 * 设置颜色
		 */
		g.setColor(color);
		g.drawLine(x1, y1, x2, y2);
	}
}
这样一个绘制直线的方法就写好了。
三、制作保存绘制形状的队列
要制作这个队列,就需要一个队列接口,然后再去重写接口里的方法
/**
 * 定义一个队列接口
 * 
 *
 */

public interface MyQueue1Interface<E> {
	/**
	 * 将元素放入队列中的方法
	 * @param s:要放入的元素
	 */
	public void add(E e);
	/**
	 * 将指定下标位置上的元素取出的方法
	 * @param index:要取出元素的下标位置
	 * @return:取出的元素
	 */
	public E get(int index);
	/**
	 * 获取队列的大小
	 * @return:队列的大小
	 */
	public int size();
	/**
	 * 将指定元素放入指定下标位置上的方法
	 * @param s:要放入的元素
	 * @param index:要放入的下标位置
	 */
	public void insert(E e,int index);
	/**
	 * 将指定下标位置上的元素移除的方法
	 * @param index:要移除元素的下标位置
	 */
	public void remove(int index);
	/**
	 * 将指定位置上的元素修改为指定的元素
	 * @param index:要修改的元素的位置
	 * @param s:修改后的元素
	 */
	public void modify(int index,E e);

}
/**
 * 重写接口里的方法
 * 
 *@param <E>:队列中元素的类型
 * 
 */
public class MyQueue1Imp<E> implements MyQueue1Interface<E>{
	//定义一个长度为0的初始数组
	Object[] zxc = new Object[0];
	public void add(E e) {
		//定义一个新的数组,长度为原来数组的长度加一
		Object[] asd = new Object[zxc.length+1];
		//将新的元素放入到新数组的最后一个下标位置上
		asd[zxc.length] = e;
		//将原来数组中的数据拷贝到新数组中
		for(int i=0;i<zxc.length;i++){
			asd[i] = zxc[i];	
		}
		zxc = asd;
	}
	public E get(int index) {
		E e = (E)zxc[index];
		return e;
	}
	public int size() {
		
		return zxc.length;
	}
	public void insert(E e, int index) {
		//定义一个新的数组
		Object[] sdf = new Object[zxc.length+1];
		//将新元素放入新数组中指定的位置
		sdf[index] = e;
		//将原来的数据拷贝到新的数组
		for(int i=0;i<index;i++){
			sdf[i] = zxc[i];
		}
		for(int j=index;j<zxc.length;j++){
			sdf[j+1] = zxc[j];
		}
		zxc = sdf;
	}
	public void remove(int index) {			
		for(int i=index;i<zxc.length-1;i++){
			zxc[i] = zxc[i+1];
		}
	}
	public void modify(int index, E e) {
		zxc[index] = e;	
	}
}
这样一个能存储绘制形状的队列就写好了。
四、制作鼠标监听器
鼠标监听器是这个画板能否实现其功能的关键,而在鼠标监听器中包括绘制形状并将绘制的形状保存进队列(以绘制直线的方法为例)
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
public class MyDrawListener implements java.awt.event.MouseListener,java.awt.event.ActionListener {
	//定义属性
	private int x1,y1,x2,y2;
	private java.awt.Graphics g1;	
	private String shape="line";
	private String color = "white";
	private MyQueue1Imp<MyShape> shapeArray;
	//创建一个画布
	public MyDrawListener(java.awt.Graphics g1,MyQueue1Imp<MyShape> shapeArray){
		this.shapeArray = shapeArray;
		this.g1 = g1;
	}
	//**********************重写Actionlistener的方法****************************\\
	 public void actionPerformed(ActionEvent e){	 
		shape = e.getActionCommand();
	 }	
	//**********************重写Mouselistener的方法****************************\\
	//重写鼠标按下时的方法	
	public void mousePressed(MouseEvent e){
		//获取鼠标按下时的坐标
		x1 = e.getX();
		y1 = e.getY();		
	}
	//重写鼠标释放时的方法
	public void mouseReleased(MouseEvent e){
		//获取鼠标释放时的坐标
		x2 = e.getX();
		y2 = e.getY();
		MyShape Msh = null;
		//调用画直线的方法
		if("line".equals(shape)){
			Msh = new MyLine(x1,y1,x2,y2);
			Msh.Draw(g1);
			shapeArray.add(Msh);
		}
	//重写鼠标单击时的方法
	 public void mouseClicked(MouseEvent e){ 
	 }
	 //重写鼠标进入时的方法
	 public void mouseEntered(MouseEvent e){ 
	 }
	 //重写鼠标退出时的方法
	 public void mouseExited(MouseEvent e){ 
	 }
}
[color=red]制作好鼠标监听器后就得将鼠标监听器添加到画板的绘制形状按钮上[/color]
在获取画板之后添加一下代码:
	//给鼠标监听器创建一个对象
	MyDrawListener MDL = new MyDrawListener(g2,shapeArray);
	//添加鼠标监听器到窗体
	this.addMouseListener(MDL);
	//添加按钮监听器
	line.addActionListener(MDL);
五、重绘
到之前已经能够绘制形状了,但是一旦最小化或最大化后,绘制的形状就会消失,这是为什么呢?因为这些形状只是存储在缓存区,一旦最小化或最大化后缓存区的数据就是被释放,那绘制的形状也就随之消失了,而怎样才能让它不消失呢?那就得将刚绘制的形状再绘制一遍,即重绘。
/**
* 重写绘画的方法
*/
public void paint(java.awt.Graphics g){
	//调用父类中的方法来绘制窗体
	super.paint(g);
	//遍历队列中的形状
	for(int i=0;i<shapeArray.size();i++){
		//定义一个形状对象
		MyShape Msh = shapeArray.get(i);
		Msh.Draw(g);	
	}		
}
至此整个的一个简单画板就完成了,o(∩_∩)o ~~
分享到:
评论

相关推荐

    几何画板制作脚本.doc

    3. **教学流程**:课件设计分为导入、新授、练习和小结四个部分。导入部分用图片引起学生的兴趣;新授阶段逐步引导学生发现和证明等腰三角形的性质;练习环节设置相关问题和例题,巩固所学知识;小结则对整个课程...

    利用几何画板探究二次函数一般式的性质.doc

    8. **师生互动与小结**:总结了二次函数的一般性质: - \( a \) 决定开口方向:\( a &gt; 0 \) 时,开口向上;\( a ) 时,开口向下。 - \( b \) 与 \( a \) 共同决定顶点位置:同号时顶点在 y 轴左侧,异号时在右侧。...

    java画图板的总结

    在Java编程语言中,画图板(Canvas)是图形用户界面(GUI)开发的一个关键组件。它是Java AWT(Abstract Window Toolkit)库的一部分,用于在窗口上绘制图形。Canvas类继承自Component,允许程序员直接在屏幕上进行...

    java学习小总结——画图板制作(附代码)

    本篇小结将聚焦于如何使用Java实现一个基本的画图板,同时提供相关的源码分析。 1. Java GUI基础 Java提供了丰富的类库用于创建GUI,主要在java.awt和javax.swing包下。在这个项目中,我们可能会使用`JFrame`作为主...

    vc开发经典模式与实例 源码

     1-3 本章小结 第2章 软件开发过程与方法  2-1 软件开发的人月神话  2-2 软件工程基础  2-2-1 软件开发模型  2-2-2 软件开发步骤 . 2-3 面向对象编程与UML建模  2-3-1 UML基础  2-3-2 面向对象...

    powerbuilder 9.0软件项目开发实践

    【图书目录】 第1章 PB 9.0编程基础 1.1 PB 9.0的特性 1.2 PB 9.0开发环境 1.3 PB 9.0的主要画板 1.4 PowerScript简介 ...1.8 小结 ...3.7 小结 ...4.5 小结 ...5.8 小结 ...6.8 小结 ...7.9 小结 ...8.4 小结 ...9.8 小结

    PowerBuilder 9.0软件项目开发实践pdf2

    【图书目录】 第1章 PB 9.0编程基础 1.1 PB 9.0的特性 1.2 PB 9.0开发环境 1.3 PB 9.0的主要画板 1.4 PowerScript简介 1.5 SQL语句的使用 1.6 常用控件 1.7 数据窗口对象 1.8 小结 第2章 记事本应用系统 ...9.8 小结

    VC开发经典模式与实例.rar

     1-3 本章小结 第2章 软件开发过程与方法  2-1 软件开发的人月神话  2-2 软件工程基础  2-2-1 软件开发模型  2-2-2 软件开发步骤  2-3 面向对象编程与UML建模  2-3-1 UML基础  2-3-2 面向对象分析 ...

    ActionScript开发技术大全

    1.3小结 8 第2章搭建ActionScript3.0开发环境 9 2.1搭建基于FlashCS3IDE的开发环境 9 2.1.1安装FlashCS3ID 9 2.1.2安装FlashCS3IDEupdate9.0.2 11 2.1.3在FlashCS3IDE下创建ActionScript3.0项目 11 2.2搭建基于Flex...

    HTML5 CANVAS游戏开发实战(PDF和源代码)

    第一部分 准备工作篇 第1章 准备工作 / 2 ...1.2 canvas简介 / 5 1.2.1 canvas标签的历史 / 5 1.2.2 canvas的定义和用法 / 6 1.2.3 如何使用canvas来绘图 / 6 1.2.4 canvas的限制 / 7 ...11.6 小结 / 322

    中国结模板PSD

    可以通过Photoshop的内置功能,如Artboard(画板)来预览不同尺寸的布局。同时,为了提高网页性能,需注意图片的优化,如减少文件大小、使用适当的文件格式(如SVG用于矢量图形,JPEG或PNG用于位图)。 标签“网页...

    Powerbuilder9.0实用教程源代码

    1.6 小结 27 1.7 习题 27 第2章 编程基础知识 28 2.1 PowerScript脚本语言书写规则 28 2.1.1 忽略大小写 28 2.1.2 语句的断行、续行和分割 28 2.1.3 注释 29 2.2 数据类型 29 2.3 变量和作用域 30 2.3.1 ...

    信息技术教案——画图.doc

    该设计方案共分为八个部分:教学目的、教学重难点、教学过程、认识“画图”窗口、尝试完成任务、保存文件、退出“画图”窗口和课堂小结。 一、教学目的 本设计方案的教学目的旨在帮助学生掌握启动与退出“画图”...

    信息化教学设计高中数学.doc

    3. 教学过程中,借助多媒体课件,进行例题讲解、练习巩固和小结归纳,使学生熟练掌握函数单调性的定义和判定方法。 六、教学流程设计 1. 创设情境,形成概念:通过多媒体展示一次函数和二次函数图象,引导学生观察...

    信息技术教案——画图.pdf

    课堂小结回顾了画图程序的基本操作,强调了铅笔工具的使用和颜色选择。扩展练习鼓励学生创新,设计出“美丽家园”的画面,提高他们的绘图技能。 在后续的课程中,进一步教授了“铅笔”工具的使用技巧,包括如何画...

    2015春六年级数学下册 7.2《探索直线平行的条件》教案1 鲁教版

    8. 课堂小结与课后作业:课堂小结强调了本节课的重点——同位角相等是判断两直线平行的关键。课后作业通常设计了类似的问题,让学生巩固所学知识,例如题目中的角度组合可能需要学生识别角度关系并判断是否存在平行...

    PHP基于GD库的图像处理方法小结

    1. GD库基础:GD库是一个用于图像创建和处理的开源库,它能够处理多种格式的图像文件,例如GIF、JPEG、PNG等,并且可以将这些格式的图像输出到浏览器。在使用GD库之前,需要确保PHP环境中已经安装并启用了GD库模块。...

    开学如何学好高中数学PPT课件.pptx

    同时,需要记数学笔记,建立数学纠错本,记忆数学规律和数学小结,争做数学课外题,作业书写规范,反复巩固,学会总结归类。 在学习高中数学的过程中,需要注意初中数学与高中数学的差异,高中数学与信息技术的紧密...

Global site tag (gtag.js) - Google Analytics