`
CSU-NingMan
  • 浏览: 24052 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

画图板小结

 
阅读更多

 

项目总结——画板

 

 

 

一.整体思路

  利用图形开发界面Java.awt包中相关类,创建窗体,图标,画布等一系列类,仿XP画图板将基本界面实现,并使用鼠标监听,重绘等实现画图的基本功能。 


二.图形界面开发


   1.创建基本的窗体

     创建主类继承JFrame类,设置基本属性


 

public class MyDraw extends JFrame(){
         public static void main(String[] ages){
		//创建兑对象
		MyDraw md=new MyDraw();
		md.showUI();}
//显示窗体的方法
	public void showUI(){
                
        this.setTitle("我的画板");//设置标题
	   	this.setSize(800, 600);//设置尺寸
		this.setLocationRelativeTo(null);//设置初始位置
		this.setDefaultCloseOperation(3);//程序关闭时,退出程序

        this.setVisible(true);//设置组件可见

 

    

   2.给窗体添加组件

     根据需要创建按钮等对象并,添加至界面中。

 

   //创建工具面板对象
		ToolPanel tp=new ToolPanel();
		
		//创建颜色面板对象
		ColorPanel cp=new ColorPanel();
			
		//创建画板对象
		DrawPanel dp=new DrawPanel(queue);

   // 添加至画板中
                this.add(tp,BorderLayout.WEST);
		this.add(cp,BorderLayout.SOUTH);
		this.add(dp,BorderLayout.CENTER);
 

 


   3.修饰美化

     根据XP画板的样子对组件进行合理的布局,并为工具按钮和标题栏添加图片

 

 

 

 

   ImageIcon image=new ImageIcon("images/"+"icon.png");
		Image img = image.getImage();
		this.setIconImage(img);

 

给每个按钮加图片

 

 

JButton btn=new JButton();
ImageIcon icon=new ImageIcon("images/"+commands[i]+".jpg");
btn.setPreferredSize(new Dimension(icon.getIconWidth(),icon.getIconHeight()));
btn.setIcon(icon);
   

三.监听器的使用

 

  实时监听画板上的事件源上发生的事件,并进行相应的处理,当按钮被点击就执行相应语句。

  首先,为画布添加监听器mouseListener,即自定义一个监听器去继承MouseAdapter,重写需要的方法,得到始末位置的坐标,并写出画图的算法。

 

 

public class MyMouseListener extends MouseAdapter {
       
        // 定义属性
	 String command;
	 Graphics2D g;
	 Color color = Color.black;
	 ToolPanel tp;
	 ColorPanel cp;
	 
	/** 构造函数 */
	public MyMouseListener(Graphics2D g, ToolPanel tp, ColorPanel cp) {
		this.g = g;
		this.cp = cp;
		this.tp = tp;
		

	}

     
      // 重写我们需要的方法
	public void mousePressed(MouseEvent e) {
		command = tp.getCommand();
		color = cp.getColor();
               。。。。。}
        public void mouseDragged(MouseEvent e) {
                             }
        。。
        。。。
        。。。。
 

 

  再者,为各种工具和颜色按钮添加监听器ActionListener,得到动作命令,根据不同的动作命令执行相应语句。

 

   例如给工具条颜色栏加监听器,通过内部类简化时间处理方式

		//匿名内部类的方式创建监听器对象
		ActionListener listener= new ActionListener(){
			//实现抽象方法
			public void actionPerformed(ActionEvent e){
				//通过e获取事件源,返回object对象,强制转型为JButton
				JButton btn=(JButton)e.getSource();
				color =btn.getBackground();
				
			}
		};
		 //循环创建按钮对象
		for (int i=0;i<10;i++){
			//创建按钮,图像图标,添加图标,添加动作命令
			JButton btn=new JButton();
			btn.setPreferredSize(new Dimension(20,20));
			btn.setBackground(colors[i]);
			panel.add(btn);
			btn.addActionListener(listener);

 

按照相同方式给工具条的每个按钮加上ActionListener。

 

 

四.重绘的基本原理与使用

  

重绘的目的在于保存画板上的图形,在界面最小化或拖动时图形不丢失。其主要的原理为利用一个自定义队列保存画板上的图形,并进行图形重绘。


1)自定义队列

补充:数组和队列

数组常用使用格式 数据类型 [] 数组名=new 数据类型(数组长度);或者数据类型[] 数组名称={};

队列 可以改变长度并实现数组的基本方法。

 

public class MyQueue {
	// 创建一个数组
	private Object[] src = new Object[0];
	// 在尾部添加一个对象
	public void add(Object o) {
		// 创建一个新数组
		Object[] a = new Object[src.length + 1];
		// 将src数组重的对象赋给a数组
		for (int i = 0; i < src.length; i++) {
			a[i] = src[i];
		}
		// 将实参赋最后一位
		a[src.length] = o;
		// 令src数组指向a数组
		src = a;
	}

	// 获取队列的长度
	public int size() {
		return src.length;

	}

	public Object get(int index) {
		return src[index];
	}

}
 


2)自定义队列后,将所画的图形保存到队列中。具体实现为,定义一个shape抽象类,将绘制不同图形的方法通过子类继承shape类实现。在监听器中,每要画图,都实例化一个shape对象,并添加至队列queue中,再调用shape中的绘图方法。

 

 //画直线
           
if (command.equals("line")) {
                 shape = new  ShapeLine(x1,y1,x2,y2,cp.getColor(),1);
		 queue.add(shape);
		 shape.draw(g);
 

3)重写窗体paint(Graphics g)方法,当窗体改变时,程序重新从内存中获取新的数据并通过paint方法在屏幕上绘制出来,注,在什么地方获取的画布即在哪儿重绘。

 

 

 

 public void paint(Graphics g){
			   
		super.paint(g);//调用父类中的重绘方法,显示窗体
		Graphics2D g2d = (Graphics2D)g;
				
		//循环队列中的数据
		for(int i=0;i<queue.size();i++){
					//获取Shape对象
		Shape shape = (Shape)queue.get(i);//强制转型为shape类型的
					//调用画图形的方法
					shape.draw(g2d);
				}  

		      }



五.相关类的总结

1)图形界面 

 JFrame JPanel JButton Graphics Graphics2D BaseStroke ImageIcon Image

2)监听器

MouseListener  MouseListener   ActionLisrener MouseListener

3)重绘

shape (shapeLine shapeOval shapeRect 。。。。)  My queue

 

 

 

 

六.我的小结

 画板是我们做的第一个具体的项目,虽然只是很基础的,很多功能还没有实现,但从中我首先意识到的是一个完整的项目或简单的一个应用程序所包含的东西之多,而且是按步骤一点点的增加功能,做任何程序对整体的把握是最重要的,细节填充就看个人的努力和细心。当然,以后更多的是团队协作,1019组,一起加油!


 

分享到:
评论

相关推荐

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

    NULL 博文链接:https://xiaoyjj.iteye.com/blog/1702155

    java画图板的总结

    NULL 博文链接:https://pengchenming.iteye.com/blog/1399196

    C游戏编程从入门到精通(13M)

    目 录 第1章 猜数字游戏 1 1.1 游戏创意 1 1.2 游戏规划 2 1.3 程序实现 4 1.4 游戏调试 6 1.5 文本模式游戏制作 8 1.5.1 文本窗口函数 9 1.5.2 INT10中断功能 11 1.6 本章小结 11 第2章 用C语言函数库画图 12 2.1 ...

    DXP实验报告.pdf

    8 内容) (1)原理图的绘制 (2)PCB 封装 六、综合练习与结果(实验板) (1)原理图的绘制 (2)PCB 封装 七、小结 常熟理工学院课程设计报告 2 一、 原理图绘制实训内容、主要步骤说明和小结 (1)原理图的绘制 ...

    Java典型模块

    1.4 小结 第2章 Java面向对象编程 2.1 面向对象的一些概念 2.1.1 面向对象涉及的概念 2.1.2 类和对象 2.2 面向对象的一些特性 2.2.1 继承特性 2.2.2 多态特性 2.2.3 封装特性 2.3 Java中实现的面向对象特性 2.3.1 ...

    《Visual C++数字图像处理开发入门与编程实践》源码

    第1章 Visual C++与数字图像处理 1 1.1 数字图像处理概述 2 1.1.1 图像与数字图像 2 1.1.2 数字图像处理研究的内容 4 1.1.3 数字图像处理的应用 6 1.2 Visual C++概述 8 1.2.1 C++语言简介 8 ...15.5 本章小结 640

    疯狂JAVA讲义

    1.9 本章小结 22 本章练习 22 第2章 理解面向对象 23 2.1 面向对象 24 2.1.1 结构化程序设计简介 24 2.1.2 程序的三种基本结构 25 2.1.3 面向对象程序设计简介 27 2.1.4 面向对象的基本特征 28 2.2 UML...

    信息技术兴趣小组活动记录.doc

    兴趣小组活动记录 "辅导 " "参加学生"20 ... " "小 " " "结 " " 兴趣小组活动记录 "辅导 " "参加学生"20 "活动时 "周五 "活动地 "微机室 " "教师 " "数 " "间 " "点 " " "活动 "好用的铅笔 "教具 "计算机 " "内容 "

    1信息技术兴趣小组活动记录.doc

    兴趣小组活动记录 "辅导 " "参加学生"24 ... " "小 " " "结 " " 兴趣小组活动记录 "辅导 " "参加学生"24 "活动时 "3.14 "活动地 "微机室 " "教师 " "数 " "间 " "点 " " "活动 "好用的铅笔 "教具 "计算机 " "内容

    计算机系统教学设计.doc

    (根据学生的回答,教师作出相应 的小结)。同学们,你们所说的这些名词有的是计算机的硬件,有的是计算机的软件,还 有一些则是计算机的应用,今天我们就要学习计算机的组成,计算机是由硬件和软件两 个部分组成的。...

    第3课--认识计算机-教学设计.doc

    (根据学生的回答,教师作出相应的小结)。同学们,你 们所说的这些名词有的是计算机的硬件,有的是计算机的软件,还有一些则是计算机的 应用,今天我们就要学习计算机的组成,计算机是由硬件和软件两个部分组成的。...

    第1课认识计算机教学设计.docx

    (根据学生的回答,教师做出相应的小结)。同学们,你们所说的这些名词有的是计算机的硬件,有的是计算机的软件,还有一些则是计算机的应用,今天我们就要学习计算机的组成,计算机是由硬件和软件两个部分组成的。通过...

    计算机应用基础教学计划.docx

    4、每节做小结,每结束一章要做总结并布置上机综合实训操作练习。 三、教学安排及教学考核方法: 本学期教学计划安排 15 周,约计授课 90 学时。其中课堂讲授 40 学时,实践 50 学时。 期末以上机实践操作为主要...

    python入门到高级全栈工程师培训 第3期 附课件代码

    03 小结 04 数据的概念 05 进制转换 06 原码补码反码 07 物理层和数据链路层 08 网络层和arp协议 09 传输层和应用层 第2章 01 上节课复习 02 arp协议复习 03 字符编码 第3章 01 网络基础和dos命令 02 为何学习...

    cmd操作命令和linux命令大全收集

    50. mspaint--------画图板 51. mstsc----------远程桌面连接 53. magnify--------放大镜实用程序 54. mmc------------打开控制台 55. mobsync--------同步命令 57. iexpress-------木马捆绑工具,系统自带 58...

    计算机应用技术(实用手册)

    计算机应用技术 实用手册 Xnllz 2011.7.29 ...有时候在系统的任务栏你见不到小喇叭有可能在这里被关闭了,即:[DISABLED],遇到这种情况可从新进入COMS把此项打开即可,即:[ENABLED]。 SATA...

Global site tag (gtag.js) - Google Analytics