目前,我们正在制作一个绘图板,在实现绘制直线功能时遇到一些问题。我认为实现的绘制直线功能不是鼠标点的起点,然后点的终点,生成直线。但在点击一个固定的起点后,鼠标被拖动,整条线随之而来...
目前,我们正在制作一个绘图板,在实现绘制直线功能时遇到一些问题。我认为绘制线性功能不是鼠标点的起点,然后点的终点,生成线性。但在点击固定起点后,鼠标拖动,整条线随鼠标移动而变化。当然,起点总是固定的。
(注:startX、startY是线的起点坐标,用鼠标按下监控,preX,preY是上一点的坐标。
g.drawLine(startX, startY, preX, preY);
preX=e.getX();
preY=e.getY();
随着鼠标的拖曳,电脑不断画出新的线。
原理是在鼠标拖曳的过程中e.getX()和e.getY(),即鼠标坐标不断变化,画布上不断画出新线。
后来在网上找了解决的方法,那就是用背景色的线来覆盖原来画的线,简单点说就是,移动鼠标的过程中,会不断画新的黑色的线,画第n条黑线的同时,就会在n-在黑线的位置画一条白线覆盖n-1位置的黑线使上一条线消失。
监控代码如下:
g.setColor(foreColor);//获取前景色,准备画新线
g.drawLine(startX, startY, e.getX(), e.getY();//画新线
if(preX!=e.getX()||preY!=e.getY()){
g.setColor(backColor);//获取背景色,准备覆盖旧线
g.drawLine(startX, startY, preX, preY);///画一条与背景色相同的线覆盖一条线
}
setPre(e);
嗯,说了这么多,我的问题来了,因为我用背景颜色相同的线来覆盖旧线。通过这个原理,我真的可以画一条可以拖动的直线。问题是,如果原画布上已经有了图案,当我的线扫过图案,用背景色的线覆盖旧线时,我实际上覆盖了图案。这就是我所纠结的。
如图所示:鼠标一拖动,就会不断画出新的黑线。同时,画一条旧的白线覆盖着一条黑线,但如果原来有图案,白线也会覆盖原来的图案。
展开