这是一个可以画直线和椭圆的程序,前面的我都理解。但是在paint()方法中有些迷惑。就是既然已经把图形画了出来,为什么还要用一个VECTOR容器将所画的图形存起来再重新画出来?就是这部分
v.add(new Line(start_X,start_Y,x,y));
for(i=0;i<v.size();i++)
{
Line l=(Line)v.elementAt(i);
if(shape.compareTo("line")==0)
g.drawLine(l.getX1(),l.getY1(),l.getX2(),l.getY2());
else
g.drawOval(l.getX1(),l.getY1(),l.getX2()-l.getX1(),l.getY2()-l.getY1());
}
}部分代码如下:.......public class DrawApplet extends Applet implements MouseListener,MouseMotionListener
{
private int x,y,start_X,start_Y,old_X,old_Y;
private boolean draw;
private Vector v;
private int i;
private String color,shape,bgcolor; public void init()
{
addMouseListener(this);
addMouseMotionListener(this);
v=new Vector(1,1);
......
}
.
.
.
.
........ public void paint(Graphics g)
{
if(!draw)
{
old_X=x;
old_Y=y;
draw=true;
}
else
{
g.setColor(getBackground());
if(shape.compareTo("line")==0)
g.drawLine(start_X,start_Y,old_X,old_Y);
else
g.drawOval(start_X,start_Y,old_X-start_X,old_Y-start_Y);
v.removeElementAt(v.size()-1);
old_X=x;
old_Y=y;
}
if(color.compareTo("red")==0)
g.setColor(Color.red);
else if(color.compareTo("green")==0)
g.setColor(Color.green);
else
g.setColor(Color.blue);
v.add(new Line(start_X,start_Y,x,y));
for(i=0;i<v.size();i++)
{
Line l=(Line)v.elementAt(i);
if(shape.compareTo("line")==0)
g.drawLine(l.getX1(),l.getY1(),l.getX2(),l.getY2());
else
g.drawOval(l.getX1(),l.getY1(),l.getX2()-l.getX1(),l.getY2()-l.getY1());
}
}
}class Line
{
private int x1,y1,x2,y2;
public Line(int x1,int y1,int x2,int y2)
{
this.x1=x1;
this.y1=y1;
this.x2=x2;
this.y2=y2;
} public int getX1() { return x1; }
public int getY1() { return y1; }
public int getX2() { return x2; }
public int getY2() { return y2; }
}
v.add(new Line(start_X,start_Y,x,y));
for(i=0;i<v.size();i++)
{
Line l=(Line)v.elementAt(i);
if(shape.compareTo("line")==0)
g.drawLine(l.getX1(),l.getY1(),l.getX2(),l.getY2());
else
g.drawOval(l.getX1(),l.getY1(),l.getX2()-l.getX1(),l.getY2()-l.getY1());
}
}部分代码如下:.......public class DrawApplet extends Applet implements MouseListener,MouseMotionListener
{
private int x,y,start_X,start_Y,old_X,old_Y;
private boolean draw;
private Vector v;
private int i;
private String color,shape,bgcolor; public void init()
{
addMouseListener(this);
addMouseMotionListener(this);
v=new Vector(1,1);
......
}
.
.
.
.
........ public void paint(Graphics g)
{
if(!draw)
{
old_X=x;
old_Y=y;
draw=true;
}
else
{
g.setColor(getBackground());
if(shape.compareTo("line")==0)
g.drawLine(start_X,start_Y,old_X,old_Y);
else
g.drawOval(start_X,start_Y,old_X-start_X,old_Y-start_Y);
v.removeElementAt(v.size()-1);
old_X=x;
old_Y=y;
}
if(color.compareTo("red")==0)
g.setColor(Color.red);
else if(color.compareTo("green")==0)
g.setColor(Color.green);
else
g.setColor(Color.blue);
v.add(new Line(start_X,start_Y,x,y));
for(i=0;i<v.size();i++)
{
Line l=(Line)v.elementAt(i);
if(shape.compareTo("line")==0)
g.drawLine(l.getX1(),l.getY1(),l.getX2(),l.getY2());
else
g.drawOval(l.getX1(),l.getY1(),l.getX2()-l.getX1(),l.getY2()-l.getY1());
}
}
}class Line
{
private int x1,y1,x2,y2;
public Line(int x1,int y1,int x2,int y2)
{
this.x1=x1;
this.y1=y1;
this.x2=x2;
this.y2=y2;
} public int getX1() { return x1; }
public int getY1() { return y1; }
public int getX2() { return x2; }
public int getY2() { return y2; }
}
解决方案 »
- java 内存问题求助
- 是不是一定要学完Java基础语言,才能进行JSP?
- HashMap的get()为什么返回null?
- Eclipse的控制台输出问题
- 我是刚学JAVA的,我到低应该从哪个地方学起呀?从J2EE 还是JAVA基处?
- 求教:我要通过一段程序运行我本地的一个.BAT文件,如何写啊?
- 大家帮我看一下这个语句好吗?
- 《Thinking in Java》VS《The Java Programming Language》
- Struts 在哪里有下载啊!
- 新手求助,代码一些看不懂
- 各位老师帮忙啊,我在mysql query browser工具中,直接在resultset 1结果中编辑输入汉字,我怎么设计表的字符集及在JSP中怎么取才能正确
- 求教:用A表信息更新B表信息的算法!
v.add(new Line(start_X,start_Y,x,y));
for(i=0;i<v.size();i++)
{
.......... }就不需要了,图象也可以显示出来,这又是为什么呢?