用Java直画线出现线条重复的问题

用鼠标拖动,在JPanel上画直线出现线条重复的问题
具体情况请大家到我空间里看看,哪里有截图,
我不知道该怎么修改程序,请大家帮帮忙!
空间地址:
http://hi.baidu.com/%CF%C4%B6%AC%C4%FD/blog/item/059a6dde323f4e14495403ad.html

1. 在你的paint()中必须要将图形擦除
2. 你是画直线,但你用的是drawRect(画矩形命令)
3. 另外,请不要在paint()以外的地方绘图,
遵守守MVC, paint专业绘图, mouseDragged,mouseReleased,mousePressed
都只改变程序状态,不要参与绘图.

你可以这样写:
1。定义线段数据结构 描述一条线的构成;
public class Line{
int x1,y1,x2,y2;
public Line(int preX,int preY,int currentX,int currentY){
this.x1=preX;this.y1=preY;
this.x2=currentX;this.y2=currentY;
}
}

2。定义当前正在画的线段 startX,startY,currentX,currentY.分别表示线段的起始点和当前点

3.定义线段数组:ArrayList list=new ArrayList();//存线段数组

4. 通过mouseDragged,mouseReleased,mousePressed 这些事件来改变当前线段当前点的位置,每次事件一到就立即 repaint()一次
事件处理中只能出现 repaint()语句,不要有绘图语句,这是MVC(绘图和控制和逻辑分开)
事件处理当用户松开鼠标时,将当前线段保存在list中

如不明白可单独问我

代码贴上:

public void mouseClicked(MouseEvent e) {repaint();}
public void mouseEntered(MouseEvent e) {repaint();}
public void mouseExited(MouseEvent e) {repaint();}
int startX,startY,currentX,currentY;

public class Line{ //自定义的线段类,你的数据结构
int x1,y1,x2,y2;
public Line(int preX,int preY,int currentX,int currentY){
this.x1=preX;this.y1=preY;
this.x2=currentX;this.y2=currentY;
}
} //自定义线段结束

ArrayList list=new ArrayList(); //用来存线段,己经画好的线段

public void mousePressed(MouseEvent e) { //按下事件
startX=e.getX();
startY=e.getY();
currentX=e.getX();
currentY=e.getY();
repaint();
}
public void mouseReleased(MouseEvent e) { //松开鼠标时代表线画好,存入list中
currentX=e.getX();
currentY=e.getY();
Line line=new Line(startX,startY,currentX,currentY);
list.add(line);
repaint();
}
public void mouseDragged(MouseEvent e) { //拖动改变当前座标并repaint()
currentX=e.getX();
currentY=e.getY();
repaint();
}
public void mouseMoved(MouseEvent e) {repaint();}

最后是paint方法:
public void paint(Graphics g){
g.drawImage(你的背景图);
g.setColor(你的颜色);

g.drawLine(startX, startY, currentX, currentY);//当前正在画的线
for(int i=0;i<list.size();i++){//以前画好的线
Line line=(Line)list.get(i);
g.drawLine(line.x1, line.y1, line.x2, line.y2);
}

}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-12-31
现在流行用java做图形了?... @_@
相似回答
大家正在搜