简单画板实现的总结

简单画板实现的总结
一.实现简单画板需要使用的JavaAPI类:
                     JFrame
JPanel
JButton
JMenuBar
JMenu
JMenuItem

MouseListener
MouseEvent
ActionListener
ActionEvent

绘制图形图像的对象
Graphics
String

二. 匿名内部类
1.没有类名,不需要class。
2.在另外一个类的{}中间。
3.超过四行代码就不考虑使用,可考虑新建一个类。

三.实现一个简单画板的步骤
1.定义好界面类。
2.给按钮添加动作监听器方法,绑定事件处理类的对象。使用的是匿名内部类。
(使用参数传递)
3.给绘图面板添加动作监听器方法,绑定事件处理类的对象定义一个类实现MouseListener接口。

/**************************练习**********************************/
总结:
1.要学会灵活运用变量。当没有现成的java方法能够直接解决问题的时候,可将思路打开,思考其他可行的方法,比如可以使用变量。在这次练习中的三角形画法中,如果运用了变量,问题也就能轻松搞定了。

1).将变量作中间变量使用
exp:
声明全局变量(DrawingListener中)
private int startX, startY, endY, endX;// 中间变量,用来存储第一条线的起始点和结束点

2)将变量作计数器使用
exp:
    private int count = 0;// 计数器,用来统计三角形的图形执行到第几步

2.画三角形时,画线和单击是两个不同的事件。如果你的代码是这样:
             public void mouseClicked(MouseEvent e1) {
     System.out.println("单击");
     x3 = e1.getX();
     y3 = e1.getY();
     if (dr.getShapes().equals("Triangle") && count == 1) {
  // 绘制三角形
  g.drawLine(x1,y1, x3, y3);
  g.drawLine(x2,y2, x3, y3);
//将count的值转为第一次点击三角形
   count=0;
    }
那么你画三角形时首先要画的第一条直线就不能成功。原因是:单击这个动作包括了按下、释放、单击三个动作。如果你的代码是如上写法,那么你的x1,x2,x3所在的坐标点都是同一个点。也就是说,你根本没在画直线,你不过是在单击而已!

所以你的代码应是这样:(其中startX是x1的中间变量,它可用来存储直线的x1的地址;
                           startY是y1的中间变量,它可用来存储直线的y1的地址;
                           endX是x2的中间变量,它可用来存储直线的x2的地址;
                           endY是y2的中间变量,它可用来存储直线的y2的地址;)
       
public void mouseClicked(MouseEvent e1) {
     System.out.println("单击");
     x3 = e1.getX();
     y3 = e1.getY();
     if (dr.getShapes().equals("Triangle") && count == 1) {
  // 绘制三角形
  g.drawLine(startX, startY, x3, y3);
  g.drawLine(endX, endY, x3, y3);
//将count的值转为第一次点击三角形
   count=0;
    }

3. 要获取画布对象就必须在窗体可见之后才能获取,否则获取Null。
4. 类实现接口的时候,必须要实现接口中所有的抽象方法。就算有的抽象方法暂时用不到,也要把它放在你的类里!
5.画图形的时候,要考虑鼠标按下和释放的坐标值大小不同的情况。
exp:
    if((x1>x2)&&(y1>y2)){
  g.drawRect(x2, y2, Math.abs(x2 - x1), Math.abs(y2 - y1));
}
  else if((x2>x1)&&(y2>y1)){
  g.drawRect(x1, y1, Math.abs(x2 - x1), Math.abs(y2 - y1));
}
  else if((x2>x1)&&(y1>y2)){
  g.drawRect(x1, y2, Math.abs(x2 - x1), Math.abs(y2 - y1));
}
  else if((x1>x2)&&(y2>y1)){
  g.drawRect(x2, y1, Math.abs(x2 - x1), Math.abs(y2 - y1));
}

你可能感兴趣的:(java)