Java学习总结之画图板

     

 

 

      经过了一两周时间,我终于完成了对画图板的学习和编写。当然这还只是画图板的一个雏形,实现的功能和Windows的相比差的老远了,简直是一个天上一个地下。和其他班上其他同学相比,我的画图板可能也是最差的一个了。

     

      

      在此我先简单介绍一下我的画图板:

       

       主界面:

 

Java学习总结之画图板_第1张图片

 

 (唉,够简单吧...我都不好意思传滴) 

  

 

package 画图板v2;
import java.awt.Color;
import java.awt.event.ActionEvent;

import 画图_形状包.Shape;

/**
 * 画图板界面
 * @author 滕捷
 *
 */

public class MydrawUI extends javax.swing.JFrame{
	//	共四部分:一、属性, 二、主程序, 三、初始化函数, 四、属性方法	
	
	//	一、属性
	private Color color = Color.black;//默认初始颜色为黑色
	private NetJavaImp<Shape>  shplist = new NetJavaImp<Shape>();//定义并创建一个队列的实现类
	private java.awt.Graphics g;//定义一个画布
	
	//	二、主程序
	/**
	 * 程序入口
	 * @param args
	 */
	public static void main(String args[]){
		
		//创建一个窗口对象
		MydrawUI ui = new MydrawUI();
		//初始化窗口
		ui.initDrawUI();	
	}
	
	//	三、初始化窗口函数,在主程序中被调用
	/**
	 * 初始化窗口函数
	 */
	public void initDrawUI(){		
		
		//设置窗口标题
		this.setTitle("我的第一个画图板");
		//设置窗口大小
		this.setSize(600, 500);
		//设置窗口布局
		java.awt.FlowLayout fl = new java.awt.FlowLayout();
		this.setLayout(fl);
		
		//创建颜色选择按钮
		javax.swing.JButton bt_color = new javax.swing.JButton("选择颜色");
		//创建按钮组
		javax.swing.ButtonGroup bgroup = new javax.swing.ButtonGroup();
		
		//创建单选按钮
		javax.swing.JRadioButton line = new javax.swing.JRadioButton("直线");
		javax.swing.JRadioButton arc = new javax.swing.JRadioButton("圆弧");
		javax.swing.JRadioButton rect = new javax.swing.JRadioButton("矩形");
		javax.swing.JRadioButton srect = new javax.swing.JRadioButton("圆角矩形");
		javax.swing.JRadioButton oval = new javax.swing.JRadioButton("圆形");
		
		//设置按钮动作命令
		line.setActionCommand("直线");
		arc.setActionCommand("圆弧");
		rect.setActionCommand("矩形");
		srect.setActionCommand("圆角矩形");
		oval.setActionCommand("圆形");
		
		//将单元按钮添加到按钮组上
		bgroup.add(line);
		bgroup.add(arc);
		bgroup.add(rect);
		bgroup.add(srect);
		bgroup.add(oval);
				
		//将组件添加到窗口
		this.add(bt_color);//颜色按钮
		this.add(line);//直线选项
		this.add(arc);//弧线选项
		this.add(rect);//矩形选项
		this.add(srect);//圆角矩形选项
		this.add(oval);//圆选项
		
		//默认选中直线
	    line.setSelected(true);
	    //设置窗体不可变大小
	    this.setResizable(false);
	    //窗口剧中
	  	this.setLocationRelativeTo(null);
	    //默认关闭窗口退出程序
		this.setDefaultCloseOperation(3);
		//显示窗口
		this.setVisible(true);
		//从窗体上获取画布
	    g = this.getGraphics();

	  	//创建并添加动作监听器到颜色选择按钮
	  	bt_color.addActionListener(new java.awt.event.ActionListener(){
	  		
	  		public void actionPerformed(ActionEvent e){
	  			ColorSelecter();
	  		}
	  	});
	  	
	    //创建一个鼠标监听器,参数分别为:画布,按钮组,储存元素的队列,MydrawUI类当前的对对象
	    Mydrawlistener ml = new Mydrawlistener(g,bgroup,shplist,this); 
	    //给窗口添加鼠标监听器
		this.addMouseListener(ml);
		   		
	}
	
	//	四、属性方法
	/**
	 *	1、重写父类绘制窗体的方法
	 */
	public void paint(java.awt.Graphics g){
		//调用父类中的paint方法来绘制窗体 
		super.paint(g);
		//调用重新绘制的方法——通过取出存放在队列中的形状来实现的
		redraw(this.g);	
	}
	
	/**
	 *	2、将队列中储存的元素重新返回窗体的方法
	 */
	public void redraw(java.awt.Graphics g){
		//可以用这个进行测试:System.out.println("形状个数:"+shplist.size());
		for(int i=0;i<shplist.size();i++){
			Shape shapes = shplist.get(i);
			shapes.draw(g);	
		}		
	}
	
	/**
	 *	3、颜色选色器的方法
	 */
	public void ColorSelecter(){
		this.color = javax.swing.JColorChooser.showDialog(null,"请选择颜色",java.awt.Color.black);
	}
	
	/**
	 *	4、得到所选颜色的方法
	 */
	public Color getColor(){
		return color;
	}
	
	
}

 

 

   

      功能一:能够通过画板上的图形单选按钮选择所要画的图形,如直线,矩形,圆角矩形,弧形,圆形或椭圆。

     

      以圆角矩形作为代表:

 

 

package 画图_形状包;

import java.awt.Color;
import java.awt.Graphics;

public class RoundRectImp extends Shape{
	//构造器重载
	public RoundRectImp(int x1,int y1,int x2,int y2,Color color){
		this.x1 = x1;
		this.x2 = x2;
		this.y1 = y1;
		this.y2 = y2;
		this.color = color;
	}
	
	//设置颜色及画图的方法
	public void draw(Graphics g){
		g.setColor(color);
		g.drawRoundRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(y2-y1),20 ,20 );
	}

}

 

      功能二:可实现图形颜色的选择

 

  

Java学习总结之画图板_第2张图片

 

 

 

 

Java学习总结之画图板_第3张图片

     
Java学习总结之画图板_第4张图片
        以上就是我的画图板总的效果了....真的太烂了,我自己都看不下去了...

      

 

         个人总结:

       

          一、以前常听老师强调要注重动手实践,什么实践出真知....但真正执行起来,我总是停留在理论阶段,以为看懂了就OK了,也懒得写了,而在自己动手做起来时,才发现自己其实根本就没弄明白所学的,或者说是在很多细节上自己无法处理。其实我并不否认看的效果,但我发现光看看其实只能在宏观上把握某个东西,也就是整体框架,而要完完整整的做出一个东西出来,光有框架是没有用的,还要有细节的填充。而我缺乏的正是这些细节内容,一些只有通过操作—即写代码才能真正的感受到和学到的东西。这也是我在后面的学习中需要特别注意的地方。

       

         二、撇开画图板的效果,虽然很糟糕,但在学习的过程中,我真的学到了很多。如:画图板的重绘;怎样在各种类之间进行传值;类的整体框架应该怎么写,那些地方该用到内部类,哪些又不行;程序运行时出现的空指针是怎么回事;怎么在jdk1.6.CHM中找到自己想要的内容;怎样创建和运用队列,队列与数组各自的优缺点及联系。这些东西,我想光从书上看是远远不够的,自己写出来后不仅理解了更加深了记忆,真的知道斌哥要重新写画图板的真正用意了。

         

 

        以上就差不多是我个人对画图板学习阶段的总结了。总结的很少,我想根本原因还是我前一段时间沉迷于一个游戏,没花什么时间在学习上。从今天起我决定金盆洗手,回归正道,....真正去做自己应该做的事!

 

在此送大家一句名言共勉:

 

                           stay hungry,stay foolish.(求知若饥,虚心若愚。)

                                                                 ——Jobs(乔布斯)

 

 

 

你可能感兴趣的:(Java学习)