之前我们已经完成了一个简易画板,但是功能远远不够,所以让我们升级画板吧。
添加图形:实心矩形,实心圆形,等腰三角形,三角形,多边形
添加颜色:任意喜欢颜色
添加工具:铅笔,橡皮擦
最终效果图:
让我们开始操作吧!
1.添加相应的按钮。
先创建数组存放按钮文本(既有文字文本,也有颜色文本)。
再将按钮加入到界面中,同时与监听器绑定在一起。
值得注意的是:颜色按钮过小,需要给其设置一个尺寸,同时还要给其附上颜色。
2.完成图形与颜色按钮功能。
a:按照是否具有文本分类:(颜色按钮无文本)
if(btncom.equals(""))
再对按钮反应进行一些设置:
if(btncom.equals(""))
{
JButton btn=(JButton)e.getSource();
btncl=btn.getBackground();
g.setColor(btncl);
}else{
com=btncom;
}
因为颜色按钮的反应是给画图工具设置颜色,故需要得到按钮的Background。
这时我们可以建立一个按钮对象,让其获取按钮的所有信息,再让我们的颜色属性得到按钮对象的Background。
而之所以在btncom得到图形按钮命令时,另创变量com获取btncom,不能一步到位。这是为了:防止一个命令既用来判断按钮种类,又判断按钮内容。多次判断,很可能出现意想不到的错误,需要警惕。
b:完成图形绘制的方法:
先用 if(com.equals(" ")) 来判断什么图形。
实心矩形,实心圆形都是Grphics g自带的,于是我们可以直接调用。
等腰三角形:
g.drawLine(Math.min(x1,x2),Math.max(y1,y2),Math.max(x1,x2),Math.max(y1,y2));
g.drawLine((x1+x2)/2,Math.min(y1,y2),Math.min(x1,x2),Math.max(y1,y2));
g.drawLine((x1+x2)/2,Math.min(y1,y2),Math.max(x1,x2),Math.max(y1,y2));
三角形:我们可以点上三个点,让它们按序相连。
这次我们需要在mouseclicked方法中填写代码:
先记录第一点坐标,再得到第二点坐标,这时将它们连线;
最后得到第三点坐标,让它与之前两点坐标都连线就可行了。
需要用到:switch(num)来决定第几点,同时绘制三点后要重新从第一点开始。
if(com.equals("三角形"))
{
switch (num)
{
case 1:
x3=e.getX();
y3=e.getY();
num++;
break;
case 2:
x4=e.getX();
y4=e.getY();
g.drawLine(x3,y3,x4,y4);
num++;
break;
case 3:
x5=e.getX();
y5=e.getY();
g.drawLine(x4,y4,x5,y5);
g.drawLine(x3,y3,x5,y5);
num=1;
break;
default:
break;
}
}
多边形:大致与三角形一致,不过需要一直保存第一点,同时要将之后两点迭代相连。
另外,我们可以用鼠标右键来使图形封口,即最后一点与起点相连。
在mouseClicked方法中key=e.getButton();这样可以得到鼠标键位(鼠标右键等于3),于是我们的代码可以完成了。
if(com.equals("多边形")){
switch (num1){
case 1:
x3= e.getX();
y3= e.getY();
x5=x3;
y5=y3;
num1++;
case 2:
x4= e.getX();
y4= e.getY();
g.drawLine(x5,y5,x4,y4);
num1++;
case 3:
x5= e.getX();
y5= e.getY();
g.drawLine(x4,y4,x5,y5);
num1=2;
default:
break;
}
if(key==3){
g.drawLine(e.getX(),e.getY(),x3,y3);
}
}
3.添加橡皮擦与铅笔功能。
由于橡皮擦与铅笔均是需要不断得到坐标信息才可以发挥作用的,我们需要使用一个新的接口
MouseMotionListener,使用方法与之前是一致的,不多赘述。
它提供了两个方法mouseDragged(鼠标拖动)与mouseMoved(鼠标移动),这次我们使用mouseDragged。
铅笔就是让每一时刻得到的点一一相连,使得成为一条线。
而橡皮檫就是实时在画板上绘制白色实心矩形(值得注意的是不是纯白,rgb均为238)来遮盖图层,达到消除的目的。
if(com.equals("铅笔")){
int x= e.getX();
int y= e.getY();
g.drawLine(x,y,x,y);
}
if(com.equals("橡皮擦")){
Color white=new Color(238,238,238);
g.setColor(white);
int x= e.getX();
int y= e.getY();
g.fillRect(x,y,60,60);
}
这样我们就完成了!!!