所有绘制必须在paint或者paintComponent中完成。 绘制必须使用保存的数据,而不是临时数据,这样才能保证缩小再变大后,图形可以复原。举例: class MyUI{ int x,y; public void paint(Graphics g){ g.drawLine(0,0,x ,y); //用变量中保存的数据绘制 } }更好的方法是使用MVC设计模式。
应该说所有的呈现过程必须在paint或者paintComponent中完成。但是绘制却可以在另外的过程中进行,这里就要用到双缓冲了,楼主可以将鼠标拖拽的线条绘制到一张image里,然后在paint或者paintComponent中呈现这张image。BufferedImage img = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_ARGB); Gaphics g = img.getGraphics();//在g里绘制线条 //在这里呈现 public void paint(Graphics g){ g.drawImage(img, 0, 0, null); }
估计是由于你盖上去以后局部重汇了
有一个repaint(int,int ,int ,int )
绘制必须使用保存的数据,而不是临时数据,这样才能保证缩小再变大后,图形可以复原。举例:
class MyUI{
int x,y;
public void paint(Graphics g){
g.drawLine(0,0,x ,y); //用变量中保存的数据绘制
}
}更好的方法是使用MVC设计模式。
BufferedImage.TYPE_INT_ARGB);
Gaphics g = img.getGraphics();//在g里绘制线条
//在这里呈现
public void paint(Graphics g){
g.drawImage(img, 0, 0, null);
}
MVC模式(模型-视图—控制器)可以满足你的要求,网上相关的资料很多。
封装的是线的坐标不过这样做速度可能稍稍慢点