- 浏览: 24052 次
- 性别:
项目总结——画板
一.整体思路
利用图形开发界面Java.awt包中相关类,创建窗体,图标,画布等一系列类,仿XP画图板将基本界面实现,并使用鼠标监听,重绘等实现画图的基本功能。
二.图形界面开发
1.创建基本的窗体
创建主类继承JFrame类,设置基本属性
public class MyDraw extends JFrame(){
public static void main(String[] ages){
//创建兑对象
MyDraw md=new MyDraw();
md.showUI();}
//显示窗体的方法
public void showUI(){
this.setTitle("我的画板");//设置标题
this.setSize(800, 600);//设置尺寸
this.setLocationRelativeTo(null);//设置初始位置
this.setDefaultCloseOperation(3);//程序关闭时,退出程序
this.setVisible(true);//设置组件可见
2.给窗体添加组件
根据需要创建按钮等对象并,添加至界面中。
//创建工具面板对象 ToolPanel tp=new ToolPanel(); //创建颜色面板对象 ColorPanel cp=new ColorPanel(); //创建画板对象 DrawPanel dp=new DrawPanel(queue); // 添加至画板中 this.add(tp,BorderLayout.WEST); this.add(cp,BorderLayout.SOUTH); this.add(dp,BorderLayout.CENTER);
3.修饰美化
根据XP画板的样子对组件进行合理的布局,并为工具按钮和标题栏添加图片
ImageIcon image=new ImageIcon("images/"+"icon.png"); Image img = image.getImage(); this.setIconImage(img);
给每个按钮加图片
JButton btn=new JButton(); ImageIcon icon=new ImageIcon("images/"+commands[i]+".jpg"); btn.setPreferredSize(new Dimension(icon.getIconWidth(),icon.getIconHeight())); btn.setIcon(icon);
三.监听器的使用
实时监听画板上的事件源上发生的事件,并进行相应的处理,当按钮被点击就执行相应语句。
首先,为画布添加监听器mouseListener,即自定义一个监听器去继承MouseAdapter,重写需要的方法,得到始末位置的坐标,并写出画图的算法。
public class MyMouseListener extends MouseAdapter { // 定义属性 String command; Graphics2D g; Color color = Color.black; ToolPanel tp; ColorPanel cp; /** 构造函数 */ public MyMouseListener(Graphics2D g, ToolPanel tp, ColorPanel cp) { this.g = g; this.cp = cp; this.tp = tp; } // 重写我们需要的方法 public void mousePressed(MouseEvent e) { command = tp.getCommand(); color = cp.getColor(); 。。。。。} public void mouseDragged(MouseEvent e) { } 。。 。。。 。。。。
再者,为各种工具和颜色按钮添加监听器ActionListener,得到动作命令,根据不同的动作命令执行相应语句。
例如给工具条颜色栏加监听器,通过内部类简化时间处理方式
//匿名内部类的方式创建监听器对象
ActionListener listener= new ActionListener(){
//实现抽象方法
public void actionPerformed(ActionEvent e){
//通过e获取事件源,返回object对象,强制转型为JButton
JButton btn=(JButton)e.getSource();
color =btn.getBackground();
}
};
//循环创建按钮对象
for (int i=0;i<10;i++){
//创建按钮,图像图标,添加图标,添加动作命令
JButton btn=new JButton();
btn.setPreferredSize(new Dimension(20,20));
btn.setBackground(colors[i]);
panel.add(btn);
btn.addActionListener(listener);
按照相同方式给工具条的每个按钮加上ActionListener。
四.重绘的基本原理与使用
重绘的目的在于保存画板上的图形,在界面最小化或拖动时图形不丢失。其主要的原理为利用一个自定义队列保存画板上的图形,并进行图形重绘。
1)自定义队列
补充:数组和队列
数组常用使用格式 数据类型 [] 数组名=new 数据类型(数组长度);或者数据类型[] 数组名称={};
队列 可以改变长度并实现数组的基本方法。
public class MyQueue { // 创建一个数组 private Object[] src = new Object[0]; // 在尾部添加一个对象 public void add(Object o) { // 创建一个新数组 Object[] a = new Object[src.length + 1]; // 将src数组重的对象赋给a数组 for (int i = 0; i < src.length; i++) { a[i] = src[i]; } // 将实参赋最后一位 a[src.length] = o; // 令src数组指向a数组 src = a; } // 获取队列的长度 public int size() { return src.length; } public Object get(int index) { return src[index]; } }
2)自定义队列后,将所画的图形保存到队列中。具体实现为,定义一个shape抽象类,将绘制不同图形的方法通过子类继承shape类实现。在监听器中,每要画图,都实例化一个shape对象,并添加至队列queue中,再调用shape中的绘图方法。
//画直线 if (command.equals("line")) { shape = new ShapeLine(x1,y1,x2,y2,cp.getColor(),1); queue.add(shape); shape.draw(g);
3)重写窗体paint(Graphics g)方法,当窗体改变时,程序重新从内存中获取新的数据并通过paint方法在屏幕上绘制出来,注,在什么地方获取的画布即在哪儿重绘。
public void paint(Graphics g){ super.paint(g);//调用父类中的重绘方法,显示窗体 Graphics2D g2d = (Graphics2D)g; //循环队列中的数据 for(int i=0;i<queue.size();i++){ //获取Shape对象 Shape shape = (Shape)queue.get(i);//强制转型为shape类型的 //调用画图形的方法 shape.draw(g2d); } }
五.相关类的总结
1)图形界面
JFrame JPanel JButton Graphics Graphics2D BaseStroke ImageIcon Image
2)监听器
MouseListener MouseListener ActionLisrener MouseListener
3)重绘
shape (shapeLine shapeOval shapeRect 。。。。) My queue
六.我的小结
画板是我们做的第一个具体的项目,虽然只是很基础的,很多功能还没有实现,但从中我首先意识到的是一个完整的项目或简单的一个应用程序所包含的东西之多,而且是按步骤一点点的增加功能,做任何程序对整体的把握是最重要的,细节填充就看个人的努力和细心。当然,以后更多的是团队协作,1019组,一起加油!
发表评论
-
java基础整理
2013-05-13 22:22 0Java基础整理 从武汉回来有好几周的时间了 ... -
线程同步
2013-01-18 23:49 827窗外狂风大作,实在不想在睡觉时刻本着不完成誓不罢休不 ... -
线程同步
2013-01-18 23:19 0窗外狂风大作,实在不 ... -
数据结构-----Hash
2012-11-23 10:14 869数据结构之Hash表 一.数据结构概念 数据结 ... -
通信基础小结
2012-10-29 00:14 748通信基础小结 通信 ... -
线程项目总结
2012-08-01 22:46 909线程项目——坦克大战总结 一.预计游 ... -
线程基础
2012-08-01 22:32 605线程基础 一.进程和线程 ... -
数据结构之链表
2012-08-01 22:23 638数据结构之链表 链表的基本概念 ... -
哈弗曼树解压缩
2012-07-30 15:06 788... -
IO总结
2012-07-16 21:05 646Java IO 总结 第一部分 ... -
Java集合机制
2012-07-15 20:01 989Java 集合框架 一.关于集合 ... -
异常机制
2012-07-11 14:30 739JAVA异常机制总结 ... -
关键字
2012-05-25 16:28 601关键字总结 一.关键字分类 1.常用关键字 ... -
继承,转型,重写,多态性
2012-05-13 15:11 670Java实战入门小结——02 一:继承 1 ... -
类,对象,构造函数,this关键字等
2012-04-15 22:48 1120Java实战入门小结--01 一:类与对象的关系 类 ...
相关推荐
NULL 博文链接:https://xiaoyjj.iteye.com/blog/1702155
NULL 博文链接:https://pengchenming.iteye.com/blog/1399196
目 录 第1章 猜数字游戏 1 1.1 游戏创意 1 1.2 游戏规划 2 1.3 程序实现 4 1.4 游戏调试 6 1.5 文本模式游戏制作 8 1.5.1 文本窗口函数 9 1.5.2 INT10中断功能 11 1.6 本章小结 11 第2章 用C语言函数库画图 12 2.1 ...
8 内容) (1)原理图的绘制 (2)PCB 封装 六、综合练习与结果(实验板) (1)原理图的绘制 (2)PCB 封装 七、小结 常熟理工学院课程设计报告 2 一、 原理图绘制实训内容、主要步骤说明和小结 (1)原理图的绘制 ...
1.4 小结 第2章 Java面向对象编程 2.1 面向对象的一些概念 2.1.1 面向对象涉及的概念 2.1.2 类和对象 2.2 面向对象的一些特性 2.2.1 继承特性 2.2.2 多态特性 2.2.3 封装特性 2.3 Java中实现的面向对象特性 2.3.1 ...
第1章 Visual C++与数字图像处理 1 1.1 数字图像处理概述 2 1.1.1 图像与数字图像 2 1.1.2 数字图像处理研究的内容 4 1.1.3 数字图像处理的应用 6 1.2 Visual C++概述 8 1.2.1 C++语言简介 8 ...15.5 本章小结 640
1.9 本章小结 22 本章练习 22 第2章 理解面向对象 23 2.1 面向对象 24 2.1.1 结构化程序设计简介 24 2.1.2 程序的三种基本结构 25 2.1.3 面向对象程序设计简介 27 2.1.4 面向对象的基本特征 28 2.2 UML...
兴趣小组活动记录 "辅导 " "参加学生"20 ... " "小 " " "结 " " 兴趣小组活动记录 "辅导 " "参加学生"20 "活动时 "周五 "活动地 "微机室 " "教师 " "数 " "间 " "点 " " "活动 "好用的铅笔 "教具 "计算机 " "内容 "
兴趣小组活动记录 "辅导 " "参加学生"24 ... " "小 " " "结 " " 兴趣小组活动记录 "辅导 " "参加学生"24 "活动时 "3.14 "活动地 "微机室 " "教师 " "数 " "间 " "点 " " "活动 "好用的铅笔 "教具 "计算机 " "内容
(根据学生的回答,教师作出相应 的小结)。同学们,你们所说的这些名词有的是计算机的硬件,有的是计算机的软件,还 有一些则是计算机的应用,今天我们就要学习计算机的组成,计算机是由硬件和软件两 个部分组成的。...
(根据学生的回答,教师作出相应的小结)。同学们,你 们所说的这些名词有的是计算机的硬件,有的是计算机的软件,还有一些则是计算机的 应用,今天我们就要学习计算机的组成,计算机是由硬件和软件两个部分组成的。...
(根据学生的回答,教师做出相应的小结)。同学们,你们所说的这些名词有的是计算机的硬件,有的是计算机的软件,还有一些则是计算机的应用,今天我们就要学习计算机的组成,计算机是由硬件和软件两个部分组成的。通过...
4、每节做小结,每结束一章要做总结并布置上机综合实训操作练习。 三、教学安排及教学考核方法: 本学期教学计划安排 15 周,约计授课 90 学时。其中课堂讲授 40 学时,实践 50 学时。 期末以上机实践操作为主要...
03 小结 04 数据的概念 05 进制转换 06 原码补码反码 07 物理层和数据链路层 08 网络层和arp协议 09 传输层和应用层 第2章 01 上节课复习 02 arp协议复习 03 字符编码 第3章 01 网络基础和dos命令 02 为何学习...
50. mspaint--------画图板 51. mstsc----------远程桌面连接 53. magnify--------放大镜实用程序 54. mmc------------打开控制台 55. mobsync--------同步命令 57. iexpress-------木马捆绑工具,系统自带 58...
计算机应用技术 实用手册 Xnllz 2011.7.29 ...有时候在系统的任务栏你见不到小喇叭有可能在这里被关闭了,即:[DISABLED],遇到这种情况可从新进入COMS把此项打开即可,即:[ENABLED]。 SATA...