import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.applet.*;
//<Applet Code="Huatu.class" Width=800 height=800></Applet>
public class Huatu extends Applet implements ActionListener,MouseMotionListener,MouseListener//实现按钮监听,和鼠标运动监听接口,要重写接口中的方法
{
Button button = new Button("清除");
MyPanel panel = new MyPanel();
ArrayList list = new ArrayList(); //加了一个list来存储点
public void init()
{
list.add(new ArrayList());
setLayout(new BorderLayout());
add(button,"North");
button.addActionListener(this); //增加按钮监听
panel.addMouseMotionListener(this); //增加一个鼠标运动的监听器
panel.addMouseListener(this); //鼠标点击监听
add(panel);
}
public void actionPerformed(ActionEvent e)
{
list.clear();
list.add(new ArrayList());
panel.repaint();
}
public void mouseDragged(MouseEvent e)
{
Point point = e.getPoint(); //得到拖动的点
ArrayList line = (ArrayList)list.get(list.size()-1);
line.add(point); //把点加到list中存储
// panel.repaint(); //重画panel
Graphics g = panel.getGraphics(); //得到panel的Graphics,进行画图
g.setColor(Color.blue);
if(line.size()>1) //如果list中不止1个点,则画一条线
{
Point p1 = (Point)line.get(line.size()-2); //list中的倒数第二个点
Point p2 = (Point)line.get(line.size()-1); //list中的最后一个点
g.drawLine(p1.x,p1.y,p2.x,p2.y);
}
else
{
Point p2 = (Point)line.get(line.size()-1);
g.drawLine(p2.x,p2.y,p2.x,p2.y); //list中的只有1个点,则画一个点
}
}
public void mouseMoved(MouseEvent e)
{}
public void mouseClicked(MouseEvent e)
{}
public void mouseEntered(MouseEvent e)
{}
public void mouseExited(MouseEvent e)
{}
public void mousePressed(MouseEvent e)
{}
public void mouseReleased(MouseEvent e) //鼠标松开时调用的方法
{
list.add(new ArrayList());
}
class MyPanel extends Panel
{
public void paint(Graphics g)
{
g.setColor(Color.blue);
for(int k=0;k<list.size();k++) //当窗口改变时候,通过这个方法复原原来在窗口上面显示的原来的线
{
ArrayList line = (ArrayList)list.get(k);
int[] xs = new int[line.size()]; //创建两个数组,用来存储x,y坐标
int[] ys = new int[line.size()];
for(int i=0;i<line.size();i++) //用循环把点取出,
{
Point p = (Point)line.get(i); //Object,把点取出,要经过类型转化
xs[i] = p.x; //x坐标和y坐标放在数组里
ys[i] = p.y;
}
g.drawPolyline(xs,ys,line.size()); //画曲线
}
}
}
}