刚来华信上课是七月七号,而七月一号华信的暑假夏令营就拉开了帷幕。我在华信的第一节课就接触到编写画图板,而那时画图板第一个版本在头一天已经结束,就是简单的画直线,我是从第二个版本开始的,感觉跳级了一样,哈哈。。。 第二版,就是在第一版的基础上加上画基本形状和颜色选择器的功能。第三版正在完善中。我就写一下我在编写过程中碰到的问题和其中已经解决的问题的方法
1.画矩形的时候,只能从左上方往右下方画。
原始代码为:g.drawRect(x1,y1,x2-x1,y2-y1);
要想从各个方向都能画出矩形,有三种方法,第一种画四条直线
g.drawLine(x1, y1, x2, y1);
g.drawLine(x1, y1, x1, y2);
g.drawLine(x1, y2, x2, y2);
g.drawLine(x2, y1, x2, y2);
第二种是用条件语句来判断x1,x2 y1,y2的大小来绘制矩形
if(x2>x1){
if(y2>y1)
g.drawRect(x1, y1, x2-x1, y2-y1);
else
g.drawRect(x1,y2,x2-x1,y1-y2);
}
else if(y2>y1){
g.drawRect(x2,y1,x1-x2,y2-y1);
else
g.drawRect(x2, y2, x1-x2, y1-y2);
}
第三种就是最简洁的,利用min函数和abs函数
g.drawRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(y2-y1));
此方法同样适用于椭圆
二、没有直接画虚线框的方法,所以只能自己写算法
方法1:
//用小线段来画虚线框
if (command.equals("2")) {
int xmin = Math.min(x1, x2), a = xmin, xmax = Math.max(x1, x2), c = xmax, ymin = Math
.min(y1, y2), b = ymin, ymax = Math.max(y1, y2), d = ymax;
Graphics2D g2=(Graphics2D)g;
g2.setStroke(new BasicStroke(2));
for (int i = a; i < c; i += 8) {
g2.drawLine(xmin, b, xmin + 4, b);
g2.drawLine(xmin, d, xmin + 4, d);
xmin += 8;
}
for (int j = b; j < d; j += 8) {
g2.drawLine(a, ymin, a, ymin + 4);
g2.drawLine(c, ymin, c, ymin + 4);
ymin +=8;
}
方法2:
//用点来画虚线框
int xmin = Math.min(x1, x2), a = xmin, xmax = Math.max(x1, x2), c = xmax, ymin = Math
.min(y1, y2), b = ymin, ymax = Math.max(y1, y2), d = ymax;
for (int i = a; i < c; i += 3) {
g.drawLine(xmin, b, xmin, b);
g.drawLine(xmin, d, xmin, d);
xmin += 3;
}
for (int j = b; j < d; j += 3) {
g.drawLine(a, ymin, a, ymin);
g.drawLine(c, ymin, c, ymin);
ymin +=3;
}
三、画笔的粗细(要举一反三运用到别的功能上去)
用Graphics2D 来将Graphics 定义的画布强制转换
Graphics2D g2=(Graphics2D)g;
g2.setStroke(new BasicStroke(6));//设置画笔粗细
看不懂的可以问我