经过了一两周时间,我终于完成了对画图板的学习和编写。当然这还只是画图板的一个雏形,实现的功能和Windows的相比差的老远了,简直是一个天上一个地下。和其他班上其他同学相比,我的画图板可能也是最差的一个了。
在此我先简单介绍一下我的画图板:
主界面:
(唉,够简单吧...我都不好意思传滴)
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 ); } }
功能二:可实现图形颜色的选择
以上就是我的画图板总的效果了....真的太烂了,我自己都看不下去了...
个人总结:
一、以前常听老师强调要注重动手实践,什么实践出真知....但真正执行起来,我总是停留在理论阶段,以为看懂了就OK了,也懒得写了,而在自己动手做起来时,才发现自己其实根本就没弄明白所学的,或者说是在很多细节上自己无法处理。其实我并不否认看的效果,但我发现光看看其实只能在宏观上把握某个东西,也就是整体框架,而要完完整整的做出一个东西出来,光有框架是没有用的,还要有细节的填充。而我缺乏的正是这些细节内容,一些只有通过操作—即写代码才能真正的感受到和学到的东西。这也是我在后面的学习中需要特别注意的地方。
二、撇开画图板的效果,虽然很糟糕,但在学习的过程中,我真的学到了很多。如:画图板的重绘;怎样在各种类之间进行传值;类的整体框架应该怎么写,那些地方该用到内部类,哪些又不行;程序运行时出现的空指针是怎么回事;怎么在jdk1.6.CHM中找到自己想要的内容;怎样创建和运用队列,队列与数组各自的优缺点及联系。这些东西,我想光从书上看是远远不够的,自己写出来后不仅理解了更加深了记忆,真的知道斌哥要重新写画图板的真正用意了。
以上就差不多是我个人对画图板学习阶段的总结了。总结的很少,我想根本原因还是我前一段时间沉迷于一个游戏,没花什么时间在学习上。从今天起我决定金盆洗手,回归正道,....真正去做自己应该做的事!
在此送大家一句名言共勉:
stay hungry,stay foolish.(求知若饥,虚心若愚。)
——Jobs(乔布斯)