蓝海之旅——画图板项目总结
从来没想过自己能够做出和XP一样的画图板出来,但如今我却做到了。尽管还有些功能没有实现,还是在蓝杰老师的指导及一起学习的伙伴的帮助下完成的。但究竟这也是我的第一个项目了。第一次总是好的,也是值得回忆的。
以下我项目的总结:
一、项目名称:自由小熊画板
二、功能介绍
1、画图功能:这个画图板可以实现曲线、直线、矩形、椭圆、填充矩形等各种多边形的画法。
2、颜色选择功能:可以设置画布的背景颜色,也可以设置图形的颜色,颜色是自己从选择器中自行选取的。
3、重绘功能:最小化窗体后,能够使所绘图形重新展现出来;
三、截图
四、程序结构
五、技术点分析
在画图板的开发当中,用到的技术点有:构造器、类的继承、自动转型、多态、接口及抽线类、事件监听器、JAVA.SWING组件及布局管理器、GRAPHICS对象及方法的调用、数组和队列的运用。主要技术点:
1.构造器和类的继承,自动转型及多态及匿名内部类的灵活运用。
a.构造器的使用
// 重载构造器传入相关参数(创建工具面板对象和画布对象)
public DrawListener(ToolPanel tp, Graphics g, ColorPanel cp, DrawPanel dp,
ListImp<Shape> shapes) {
this.tp = tp;
this.cp = cp;
this.dp = dp;
this.shapes = shapes;
g.setColor(color);
color = cp.getBackgroundColor();
}
b.匿名内部类的使用
// 实例化一个画图面板,并定义重绘画布对象的方法; final DrawPanel dp = new DrawPanel() { //使用匿名内部类 public void paint(Graphics g) { super.paint(g); // 遍历 drawShape(g); } }
2.类参数及全局变量和局部变量的传入与使用。特别是graphics 类变量的传入与导出的处理。
// 鼠标按下的时的监听方法 public void mousePressed(MouseEvent e) { g = dp.getGraphics(); x1 = e.getX(); y1 = e.getY(); // 在画图之前取得选中的color color = cp.getBackgroundColor(); // 设为画布上的color g.setColor(color);
3. 数组及队列的灵活运用。
//创建工具图形名称数组 String[] toolname={"any","select","brush","curve","eraser","line", "loupe","oval","paint","text","pencil","painting","polygon","rect","round_rect",
//调用循环语句将数组中语素实例化对象及调用
for(int i=0;i<toolname.length;i++){
ImageIcon toolpic = new ImageIcon("images/"+toolname[i]+".gif");
javax.swing.JButton jbt = new javax.swing.JButton(toolpic);
jbt.setPreferredSize(new Dimension(25,25));
jbt.setActionCommand(toolname[i]);
jtbar.add(jbt);
jbt.addActionListener(btnlistener);
六、开发过程中遇到的错误。
1.在画布对象的传入与导出时出现错误导致不能改变颜色。
2.添加菜单条时出错,添加菜单条到窗体时一定要使用set方法,否则导致画笔坐标出现误差。 // 设置窗体的菜单栏 this.setJMenuBar(menubar);
3.在最后画图方法继承shape类后,调用画图方法,在传入参数时出错。
没有与构造器参数顺序一致(方法参数顺序)
//重载构造方法,要求在创建直线对象的时候,传入画直线的点的坐标和颜色 public Oval (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; }
else if (tp.getCommand().equals("oval")){ // 创建椭圆对象,并传给形状变量 sh = new Oval(x1, y1, x2, y2, color); sh.draw(g); // 将形状变量保存到队列当中; shapes.add(sh);