蓝海之旅——画图板项目总结


                  蓝海之旅——画图板项目总结
      从来没想过自己能够做出和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);

 

 

 


 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值