J A V A简单画板程序设计实验报告Document serial number【UU89WT-UU98YT-UU8CB-UUUT-UUT108】JAVA期末画板实验报告课程题目:运用JAVA语言编写一个画板程序,这个画板要有画图,特殊图形绘制,颜色改变,画笔大小改变等功能。
设计思想:1.进行界面设计2.进行算法实现3.运行调试4.总结问题设计过程:A.界面设计B.新建一个Jframe容器,然后定义一个panel( Panel convas2),convas2是工具栏。
用borderlayout布置容器的边框布局,将工具栏放在NORTH部分。
完成界面设计。
add(canvas2,;Panel canvas2 = new Panel();添加工具按键Panel canvas2 = new Panel();Button btn1 = new Button("直线");Button btn2 = new Button("椭圆");Button btn3 = new Button("矩形");Button btn4 = new Button("清除");Button btn5 = new Button("画笔");Button btn6 = new Button("橡皮");Choice choice = new Choice();Choice choice1 = new Choice();(choice);(choice1);(btn1);(btn2);(btn3);(btn4);(btn5);(btn6);在工具表中,有两个下拉菜单,分别收录画笔的大小和颜色。
1.画笔的大小:("1");("3");("5");("7");("9");2.画笔颜色("黑色");("蓝色");("红色");("黄色");("绿色");3展示画板C.算法实现运用画板,首先要对工具栏按键和鼠标进行监听,然后对监听进行响应。
运行相应程序进行画图1.监听程序展示:(this);(this);(this);(this);(this);(this);(this);(this);addMouseListener(this);addMouseMotionListener(this);2.按键监听响应监听到按键后,判断当前会话工具public void actionPerformed(ActionEvent e) { if().equals(btn1)){a='1';}if().equals(btn2)){a='2';}if().equals(btn3)){a='3';}if().equals(btn4)){Graphics g = ();(0, 0, (), ());}if().equals(btn5)){a='4';}if().equals(btn6)){a='5';}}定义一个变量a,对按键监听进行响应,例如当监听到btn1时赋值a=‘1’(a为char型),即当前工具为直线。
但是当监听到btn4时不进行对a赋值而是直接进行清除操作,由于清除操作是对画布进行清除,不参与鼠标事件,因此可以直接执行。
3.鼠标监听响应a.鼠标按钮按下事件,获取画图起始坐标x0,y0.public void mousePressed(MouseEvent e){x0=();y0=();}b.鼠标移动事件public void mouseMoved(MouseEvent e){}c.鼠标按钮松开事件,此次响应完成对直线,椭圆,矩形进行绘制。
p ublic void mouseReleased(MouseEvent e){Graphics2D g = (Graphics2D)();size=new BasicStroke(con,,;(b);(size);switch(a){case'1':(x0, y0, (), ());break;case'2':(x0, y0, () - x0, () - y0);break;case'3':(x0, y0, () - x0, () - y0);break;}}d.鼠标进入事件:public void mouseEntered(MouseEvent e){}e.鼠标离开事件:public void mouseExited(MouseEvent e){}• f.鼠标单击事件:public void mouseClicked(MouseEvent e){}g.鼠标拖动事件:此次响应实现画笔(随笔画),橡皮的绘制。
public void mouseDragged(MouseEvent e) {Graphics2D g = (Graphics2D)();size=new BasicStroke(con,,;(b);(size);switch(a){case'4':(x0, y0, (), ());x0 = ();y0 = ();break;case'5':(x0 - 10, y0 - 10, 20, 20);x0 = ();y0 = ();break;}}4.下拉列表响应a.颜色下拉列表响应:if()==choice){if()==0)b=;if()==1)b=;if()==2)b=;if()==3)b=;if()==4)b=;}调用()返回被选中的选项的序号(下拉列表中第一个选项序号为0,依次递加。
)即进行选择颜色的操作b.画笔大小下拉列表响应:if()==choice1){if()=="1"){con=1;}else if()=="3"){con=3;}else if()=="5"){con=5;}else if()=="7"){con=7;}else if()=="9"){con=9;}}调用()返回被选中选项的标签文本字符串,即确定画笔的大小(con)。
5.工具栏工具实现程序详解(1)Graphics2D g = (Graphics2D)();size=new BasicStroke(con,,;(b);(size);绘制图形用到类Graphics2D,其中包括很多绘制图形的方法,定义一个Graphics2D类g,用getGraphics()来得到一个Graphics2D对象,它相当于组建的绘图环境,可以进行各种绘图操作。
size=new BasicStroke(con,,;定义一个BasicStroke类size来确定画笔的大小,其中BasicStroke类定义针对图形图元轮廓呈现属性的一个基本集合,这些图元使用Graphics2D 对象呈现,而该对象的Stroke 属性设置为此 BasicStroke。
其中con为画笔宽度,CAP_BUTT指无装饰地结束未封闭的子路径和虚线线段,JOIN_BEVEL通过直线连接宽体轮廓的外角,将路径线段连接在一起。
(以上内容为网上查找资料所得。
)(2)实现直线,椭圆,矩形绘制:switch(a){case'1':(x0, y0, (), ());break;case'2':(x0, y0, () - x0, () - y0);break;case'3':(x0, y0, () - x0, () - y0);break;}(3)随笔画和橡皮switch(a){case'4':(x0, y0, (), ());x0 = ();y0 = ();break;case'5':(x0 - 10, y0 - 10, 20, 20);x0 = ();y0 = ();break;}6.主类程序得以运行的入口,进入主类后即运行litao()类。
D.调试运行调试运行后得到了画板和预期的所有功能,实现结果展示:E.遇到问题1.绘制完成后,将窗口最大化或者最小化后再打开,原本绘制的图形消失。
尚未解决。
2.确定画笔大小时不得要领,后来通过查找资料解决。
附表1:源程序:import .*;import class litao extends JFrame implements MouseMotionListener,MouseListener,ActionListener, ItemListener {Panel canvas2 = new Panel();Button btn1 = new Button("直线");Button btn2 = new Button("椭圆");Button btn3 = new Button("矩形");Button btn4 = new Button("清除");Button btn5 = new Button("画笔");Button btn6 = new Button("橡皮");Choice choice = new Choice();Choice choice1 = new Choice();Color b;int x0,y0;char a='4';int con=1;BasicStroke size;private static Color[] colors = { , , ,, };public litao(){("1");("3");("5");("7");("9");("黑色");("蓝色");("红色");("黄色");("绿色");(choice);(choice1);(btn1);(btn2);(btn3);(btn4);(btn5);(btn6);(this);(this);(this);(this);(this);(this);(this);(this);addMouseListener(this);addMouseMotionListener(this);add(canvas2,;setBackground;;;setSize(800, 600);setVisible(true);}public void paint(Graphics g){}public void actionPerformed(ActionEvent e) { if().equals(btn1)){a='1';}if().equals(btn2)){a='2';}if().equals(btn3)){a='3';}if().equals(btn4)){Graphics g = ();(0, 0, (), ());}if().equals(btn5)){a='4';}if().equals(btn6)){a='5';}}public void mousePressed(MouseEvent e) {x0=();y0=();}public void mouseMoved(MouseEvent e){}public void mouseReleased(MouseEvent e) {Graphics2D g = (Graphics2D)();size=new BasicStroke(con,,;(b);(size);switch(a){case '1':(x0, y0, (), ());break;case '2':(x0, y0, () - x0, () - y0);break;case '3':(x0, y0, () - x0, () - y0);break;}}public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseClicked(MouseEvent e){} public void mouseDragged(MouseEvent e) { Graphics2D g = (Graphics2D)();size=new BasicStroke(con,,;(b);(size);switch(a){case '4':(x0, y0, (), ());x0 = ();y0 = ();break;case '5':(x0 - 10, y0 - 10, 20, 20);x0 = ();y0 = ();break;}}public void itemStateChanged(ItemEvent e) { if()==choice){if()==0)b=;if()==1)b=;if()==2)b=;if()==3)b=;if()==4)b=;}if()==choice1){if()=="1"){con=1;}else if()=="3"){con=3;}else if()=="5"){con=5;}else if()=="7"){con=7;}else if()=="9"){con=9;}}}public static void main(String[] args) {new litao();}}。