小菜鸟最近一直在试着写画图板,写到今天算是告一段落,来小结一下。
一、对于画图板功能的初步构想
首先,在敲代码之前,想好自己有哪些好的想法是很重要的。把自己的要求一步一步写下来。
画图板,能够绘制简单的直线,椭圆,矩形等的形状;然后,想要换色怎么办,记下来;想画出立体图,怎么画;在最小化窗口或窗口被覆盖后,如何能让绘制的图形还在画板上。。。。。。
二、初步功能的实现----组件的使用
使用JFrame 的组件是必须的,立即获得一个窗口化工具,画板有了。大小,名字迅速写好。紧接着,按钮,选项加上去。一个简单的画图板就有了。
三、监听器的添加
按钮是添加上去了,可是如何让电脑实现相应的功能呢
监听器使用有个难处在于要准确传递参数
在画图过程中,按钮监听器是必须的
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseListener;
/**
* 按钮监听器,鼠标点击按钮实现对应的功能
* @author Administrator
*/
public class ButtonListener implements ActionListener{
public String command="line";
public void actionPerformed(ActionEvent e) {
command=e.getActionCommand();
System.out.println(command);
}
}
写好它的函数以后还要添加在主函数最后的显示语句前,方便查看。
当然,要绘制图形的话,就需要鼠标的移动去获取对应点的坐标,所以鼠标监听器也来了。这里用到了MouseListener
// 鼠标监听器的点击和获取坐标
public void mouseClicked(MouseEvent e) {
System.out.println("mouseClicked");
};
public void mousePressed(MouseEvent e) {
// 获取按钮监听器中选择的按钮对应的动作命令,作为要绘制的形状类型
if (blis.command.equals("green")) {
color = Color.green;
} else {
type = blis.command;
}
x1 = e.getX();
y1 = e.getY();
}
public void mouseReleased(MouseEvent e) {
x2 = e.getX();
y2 = e.getY();
}
点的坐标也都有了,绘制图形就不在是难事,更多需要去思考的是图形本事绘制所需要函数的问题。
。三、数组的使用
说到重绘,就不得不说鼠标在获取坐标后的存储。重绘的实现,第一步就是要想到重绘实际上是将已经获取的点的坐标及其相应的信息(比如颜色)等的信息存储起来。存储的话,菜鸟刚学,只会数组。所以构建了一个简单数组(可以实现元素的存入,取出,删除功能)
public class MyList<E> {
Object myList1[] = new Object[0];
//增加
public void add(E e) {
Object myList2[] = new Object[myList1.length+1];
for(int i = 0; i < myList1.length; i++) {
myList2[i] = myList1[i];
}
myList2[myList1.length] = e;
myList1 = myList2;
}
//删除
public void delete(int index) {
Object myList2[] = new Object[myList1.length-1];
for(int i = 0; i < index; i++) {
myList2[i] = myList1[i];
}
for(int i = index; i < myList2.length; i++) {
myList2[i] = myList1[i+1];
}
myList1 = myList2;
}
//修改
public void modify(int index, E e) {
myList1[index] = e;
}
//取出
public E getElement(int index) {
return (E)myList1[index];
}
接下来,在主函数中,构建重绘的函数
其中,super.paint(g);是很必要的,它的作用是重绘组件。
public void paint(Graphics g)
{
super.paint(g);
/****** 重绘的方法写到这里 ********/
for(int i = 0; i < List.getSize(); i++) {
List.getElement(i).drawING(g);
}
}
四、效果及总结
总结:在coding中,同学给予的帮助令我影响深刻:
1、他的代码整齐而有规划。每一个class只实现与名字相关的功能,看着方便,也不方便修改;
2、在构建数组函数时,考虑到了通用性。用泛型去定义,更加方便去调用,增加了它的通用性。不需在每一次的使用时对以前的函数进行大修改,只要简单修改参数名和添加备注就可以。
当然还有不少功能没有实现,这些在今后的学习中继续完善