Java画板实验报告_第1页
Java画板实验报告_第2页
Java画板实验报告_第3页
Java画板实验报告_第4页
Java画板实验报告_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

二、Java画板的设计一、实验名称及其要求A、实验名称:Java画板的设计B、实验要求:.实验目的:图形界面设计。熟悉java.awt包中的组件,掌握图形界面设计方法,理解委托事件处理模型。.实验要求:(1)设计图形界面添加菜单:窗口上添加各种组件及菜单,并处理组件及菜单的事件监听程序。(2)实现画板的基本功能。二、程序设计本程序完成的是一个类似于Windows画图板的绘图程序。由于不是开发和设计专业的绘图和图像制作软件,所以,完成的程序的简单功能包括以下几项:.新建一个空白图形文件:用于绘制新的图形。.打开或保存一个图形文件,便于对图形文件的管理。.绘制一些基本的画图组件:直线、矩形、实心矩形、椭圆、实心椭圆、圆、实心圆、圆角矩形、实心圆角矩形等。.可以用鼠标在绘图面板上单击拖动进行随笔画。.橡皮擦:可以将已绘制好的图形擦掉。.添加文字:可以在绘图区域内添加文字。.选择文字的字体:通过一个下拉式的选择条,可以选中所需要的字体。本程序中包括:宋体、隶书、华文彩云、仿宋_GB2312华文行楷、方正舒体、TimesNewRomanSerif、MonospacedSonsSerif、Garamond当然,在下面的的程序分析中可以看到,由于我们灵活设置了字体数组,是的可以随意添加系统支持的任何字体。大大方便和简化了程序设计。.选择文字的字体风格:通过两个复选框按钮,可以选择需要的字体风格,包括:粗体、斜体,使用者有三种选择方式,包括:①同时选中两者、②只选择其中一种、③两者都不选中。.设置画笔的颜色:可以选择当前绘制图形的画笔颜色,让图形更加丰富多彩、生动活泼。.设置画笔的粗细:该选项在作用于基本图形组件和文字时,它的效果是不一样的。①当作用于绘制图形组件时,它的作用是改变画笔绘制线条的粗细;②当作用于文字时,它的作用是改变文字的大小。由此可以看到,虽然我们的画图板程序不及那些专业的绘图程序,但是,“麻雀虽小,五脏俱全”,它已经具备了一个绘图软件所应该有的基本功能和操作。通过对本程序的分析,我们可以更加系统地学习和了解如何从整体上设计和实现一个程序。(一):程序基本组成框架和结构.一组基本图形按钮,包括:pencil(随笔画)、line(直线)、rect(矩形)、frect(实心矩形)、oval(椭圆)、foval(实心椭圆)、circle(圆)、fcircle(实心圆)、roundrect(圆角矩形)、frrect(实心圆角矩形)、rubber(橡皮擦)、word(文字)。这些基本图形都继承于同一个父类:drawings。drawings具有变量(属性)intx1,x2,y1,y2;//用来存放相应图形元素的坐标intR,G,B;//用来存放图形色彩颜色信息floatstroke;//用来存放画笔粗细inttype;//用来保存图形类型Strings1;//用来保存输入文字字符串Strings2;//用来保存字体类型字符串同时,drawing还具有方法:voiddraw(Graphics2Dg2d)。;draw()方法中用到了Java绘图里面的Graphics2D类,所有28承drawings类的图形子类都重写了此方法。这就是Java程序中类的继承的概念。它对于程序代码的重用是很重要的,将极大的方便和简略程序代码。.止匕外,程序中还包括一下三个基本操作按钮:新建(New:新建一个图形文件。打开(Ope。:打开一个图形文件。保存(Save):保存当前图形文件。.选择颜色和设置当前画笔粗细的按钮分别为:颜色(Color)、线条粗细(Stroke)<.选择当前字体风格的选择框为:粗体(BOLD、斜体(ITALIC),用以设置当前字体的风格。.选择当前字体的下拉式复选框为:Styles。.菜单条及其组成:文件(File)菜单项,包括:New(新建一个图形文件)、Load(打开一个图形文件)、Save(保存当前图形文件)、Exit(退出程序)。颜色(Color)菜单项:用来设置当前颜色。线条粗细(Stroke)菜单项:用来设置当前画笔粗细。帮助(Help)菜单项:有关的程序帮助提示。完成的程序界面效果如下图:):画图板相关操作.新建一个图形文件选才?File-New菜单,则清除当前所绘制的图像,回到初始画面。.打开已有的文件选才?File-Load菜单,则清除当前所绘制的图像,并弹出打开文件对话框要求选择要打开的文件。如下图:3.保存选才¥File-Save菜单,则弹出要求保存文件对话框4.绘制基本图形基本图形包括以下几种:pencilline:rect::随笔画,图标为pencilline:rect::随笔画,图标为:直线,图标为:矩形,图标为:口frect:实心矩形,图标为:oval:椭圆,图标为:fovalcirclefcircle实心椭圆,图标为fovalcirclefcircle实心椭圆,图标为:圆,图标为::实心圆,图标为:roundrect:圆角矩形,图标为:frrect:实心圆角矩形,图标为:*Rrubber:橡皮擦,图标为:0绘图时,单击工具栏上相应图形的图标,然后用鼠标拖动,在绘图区域内进行绘图即可。5.设置画笔大小单击工具栏上的图标,或单击Stroke-SetStroke菜单,则弹出相应的设置当前画笔粗细对话框。如下图:6.选择颜色6.选择颜色单击工具栏区域W,单击工具栏区域W,或单击ColorfChooseColor菜单,则弹出相应的选择当前画图颜色对话框。如下图::样本si网卸晒工镇的⑥}®k子贡比n~rn-n・.rrn-n-n・n-mTi■--JdJJJB-m—1-rn・m-n-rn・rrrn-n子贡比n~rn-n・.rrn-n-n・n-mTi■--JdJJJB-m—1-rn・m-n-rn・rrrn-n」・□duds确至示例文本示例文本取消重置示)示例文本示例文本.选择字体风格粗体口斜仪在工具栏区域可以选择相应的字体风格,有粗体、斜体和粗斜体三种可供选择。在工具栏区域.选择字体在工具栏区域,可以选择字体,本程序中有如下几种字体可供选择:宋体、隶书、华文彩云、仿宋_GB2312、华文行楷、方正舒体、TimeNewRoman、Serif、Monospaced、SonsSerif、Garamond。三:系统功能设计分析画板主要由以下几个部分组成:主窗体的设计。主类(DrawPa。用来生成主界面,完成画图板的主要框架。主类由JFrame派生出来。主界面由菜单栏、工具栏和画图区域三部分组成,布局格式采用BorderLayout布局形式。菜单栏和工具栏的设计。菜单栏包括文件菜单栏、颜色菜单栏、线条粗细菜单栏和提示菜单栏。其中①文件菜单栏包括文件的新建、打开、保存等选项;②颜色菜单栏可以进行颜色选择;③线条粗细菜单栏设置线条的粗细;④提示菜单栏给出提示信息。工具栏由新建、打开和保存文件按钮、基本图形的按钮、选择字体风格复选框和字体下拉列表框组成。在主类中添加并对菜单栏和工具栏添加事件监听。事件响应的处理。对菜单栏、工具栏和用鼠标画图的事件响应进行处理。菜单栏中文件的新建、打开和保存菜单事件的处理:Java把每个文件都视作顺序字节流。如果要在Java中进行文件处理,则必须用到Java.io包。这个包定义了一些流类,选用FileInputStream(从文件中读入数据)和FIleOutputStream(向文件输出数据),通过建立这些文件的对象便可以打开文件。这些流相应地从InputStream和OutputStream派生,这些文件均使用文件流,所以必须将文件结构化以适应程序的要求。我们需要对保存的对象序列化,然后以输出流的方式保存。在程序中用newFile()、loadFile()和saveFile()三个函数分别实现文件的新建、打开和保存。工具栏事件的处理:主要有一些Button组成。我们用ButtonHandler内部类处理基本单元事件,ButtonHandleU内部类处理新建、打开和保存文件按钮,在画图类DrawPanel中定义CreateNewItem()函数处理工具栏中的画图事件。鼠标画图:由于画图板主要是用来画图,所以需要在程序中添加对鼠标按下、拖动、进入、退出、移动和单机事件进行监听并进行处理。内部类mouseAS义了完成鼠标按下、松开、进入、退出事件响应。内部类mouse睨成鼠标拖动和移动事件响应。画图的基本功能。在程序设计中用到了动态绑定,我们可以提取他们的公共属性,先建立一个父类,然后建立各个子类,继承父类中的方法并将父类中的draw函数重写。一些关于图形形状的类,最主要是用于画图、字体和橡皮擦等基本类型。如Circle、Triangle、Rectangle,它们都是有超类(Object类)派生的。在面向对象编程中,每个类都有画出自己的能力,每个类都有自己的draw函数,但每种形状的draw函数都不一样,但在绘制任何形状时,只需简单调用父类drawing的draw方法,然后让程序动态地根据对象的类型决定使用哪个子类的draw方法。为了使画出的图形更加美观,我们在draw函数中使用了Graphics2D的对象的引用。这样可以在不改变原程序的情况下,添加扩展的图形,是程序变得更加强大。同时,为了文件的保存,父类实现Serialize接口,将对象线性化。四:程序结构说明本程序主体为一个文件:QingDrawPad.java。其中包括的程序段有:①DrawPad():构造函数,用以初始化。②chooseC010r():选择当前绘图颜色程序段。③setStroke():设置当前画笔粗细程序段。④loadFile():调用图形文件程序段。⑤newFile():新建一个图形文件程序段。⑥saveFile():保存当前所绘制图形程序段。⑦creatNewItem():新建一个基本图形单元程序段。相应的内部类有:①ButtonHandler:用来处理基本图形单元的按钮事件。②ButtonHandleU:用来处理NewOpenSave三个操作按钮的按钮事件。③DrawPanel:用来创建绘图区域的子类。④MouseA继承了MouseAdapter,用来完成鼠标相应事件的操作,如单击、松开、进入和离开等。⑤MouseB继承了MouseMotionAdapter,用来完成鼠标拖动和鼠标移动的相应事件操作。此外,还继承了父类drawings的基本图形子类,如前所述,这里不再重复。五:程序绘图效果示意图我们可以看到,整个程序界面很简洁,而且界面操作、提示内容全部是中文,一目了然。在左上方的菜单栏里有文件、颜色、线条粗细、帮助4个下拉式菜单,可以对绘图文件进行相应的操作。下面一排是工具栏的工具按钮,从左到右依次为:新建文件、打开文件、保存文件、随笔画、直线、空心矩形、实心矩形、空心椭圆、空心圆、实心圆、空心圆角矩形、实心圆角矩形、橡皮擦、颜色选择按钮、线条粗细设置按钮、文字添加按钮、粗体字体选择框、斜体字体选择框、字体选择下拉式选择框。整个工具栏是可以拖动的,可以将它拖动到程序窗口的任意位置。工具栏下面的整个白色区域就是绘图区域,即绘图面板,它的大小可以随着窗口的大小自动调整。在窗口的最底部是程序设计作者标注,以及鼠标状态提示条,可以显示当前的鼠标状态,包括进出窗口、移动、单击、松开等。具体效果如下列图所示:importjava.awt.*;importjava.awt.geom.*;importjava.awt.event.*;importjavax.swing.*;importjava.io.*;importjava.util.*;publicclassDrawPadextendsJFrame//主类,扩展了JFrame类,用来生成主界面{privateObjectInputStreaminput;privateObjectOutputStreamoutput;//定义输入输出流,用来调用和保存图像文件privateJButtonchoices口;〃按钮数组,存放以下名称的功能按钮privateStringnames口={"New","Open","Save",//这三个是基本操作按钮,包括"新建"、"打开"、"保存"/*下面是我们的画图板上面有的基本的几个绘图单元按钮*/"pen","line","rect","frect","oval","foval","circle","fcircle","roundrect","frect","rubber","color","stroke","word"};privateStringstyleNames口={"宋体","隶书","华文彩云","仿宋_GB2312","华文行楷","方正舒体","TimesNewRoman","Serif","Monospaced","SonsSerif","Garamond"};privateIconitems口;privateStringtipText口={//这里是鼠标移动到相应按钮上面上停留时给出的提示说明条”新建一个文件",”打开一个文件","保存当前文件","绘制线条","绘制直线","绘制空心矩形","绘制实心矩形",”绘制空心椭圆","绘制实心椭圆","绘制空心圆形","绘制实心圆形","绘制空心圆角矩形","绘制实心圆角矩形","橡皮擦","选择颜色","设置线条粗细","输入文字”};JToolBarbuttonPanel;〃定义按钮面板privateJLabelstatusBar;//显示鼠标状态的提示条privateDrawPaneldrawingArea;//画图区域privateintwidth=850,height=550;drawings口itemList=newdrawings[5000];//用来存放基本图形的数组privateintcurrentChoice=3;〃设置默认画图状态为随笔画intindex=0;//当前已经绘制的图形数目privateColorcolor=Color.black;〃当前画笔颜色intR,G,B;//用来存放当前色彩值intf1,f2;//用来存放当前字体风格Stringstyle1;〃用来存放当前字体privatefloatstroke=1.0f;//设置画笔粗细,默认值为1.0fJCheckBoxbold,italic;//bold为粗体,italic为斜体,二者可以同时使用JComboBoxstyles;publicDrawPad(){super("绘图画板(中国风)");JMenuBarbar=newJMenuBar();//定义菜单条JMenufileMenu=newJMenu("文件");//新建文件菜单条JMenuItemnewItem=newJMenuItem("新建");newItem.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){newFile();〃如果被触发,则调用新建文件函数段});fileMenu.add(newItem);//保存文件菜单项JMenuItemsaveitem=newJMenuItem("保存");saveItem.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){saveFile();〃如果被触发,则调用保存文件函数段}});fileMenu.add(saveitem);//打开文件菜单项JMenuItemloaditem=newJMenuItem("打开");loadItem.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){loadFile();〃如果被触发,则调用打开文件函数段}});fileMenu.add(loaditem);fileMenu.addSeparator();//退出菜单项JMenuItemexititem=newJMenuItem("退出");exitItem.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){System.exit(O);〃如果被触发,则退出画图板程序}});fileMenu.add(exititem);bar.add(fileMenu);//设置颜色菜单条JMenucolorMenu=newJMenu("颜色");//选择颜色菜单项JMenuItemcoloritem=newJMenuItem("选择颜色");colorItem.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){chooseColor();〃如果被触发,则调用选择颜色函数段}});colorMenu.add(coloritem);bar.add(colorMenu);//设置线条粗细菜单条JMenustrokeMenu=newJMenu("线条粗细");//设置线条粗细菜单项JMenuItemstrokeitem=newJMenuItem("设置线条粗细”);strokeItem.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){setStroke();}});strokeMenu.add(strokeltem);bar.add(strokeMenu);//设置提示菜单条JMenuhelpMenu=newJMenu("帮助");//设置提示菜单项JMenuItemaboutItem=newJMenuItem("关于画板");aboutItem.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){JOptionPane.showMessageDialog(null,"此软件仅用于测试","画图板说明",JOptionPane.INFORMATION_MESSAGE);}});helpMenu.add(aboutltem);bar.add(helpMenu);items=newImageIcon[names.length];//创建各种基本图形的按钮drawingArea=newDrawPanel();choices=newJButton[names.length];buttonPanel=newJToolBar(JToolBar.VERTICAL);buttonPanel=newJToolBar(JToolBar.HORIZONTAL);ButtonHandlerhandler=newButtonHandler();ButtonHandlerlhandleri=newButtonHandler1();//导入我们需要的图形图标,这些图标都存放在与源文件相同的目录下面for(inti=3;i<choices.length;i++){items[i]=newImageIcon("F:\\eclipse\\eclipse\\workspace\\Test\\src\\icon\\"+names[i]+".jpg");choices[i]=newJButton(items[i]);choices[i].setToolTipText(tipText[i]);buttonPanel.add(choices[i]);}//将动作侦听器加入按钮里面for(inti=3;i<choices.length-3;i++){choices[i].addActionListener(handler);}/*choices[0].addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){newFile();}});choices[1].addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){loadFile();}});choices[2].addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){saveFile();}});*/choices[choices.length-3].addActionListener(handler1);choices[choices.length-2].addActionListener(handler1);choices[choices.length-1].addActionListener(handler1);//字体风格选择styles=newJComboBox(styleNames);styles.setMaximumRowCount(8);styles.addItemListener(newItemListener(){publicvoiditemStateChanged(ItemEvente){style1=styleNames[styles.getSelectedIndex()];}});//字体选择bold=newJCheckBox("粗体");italic=newJCheckBox("斜体");checkBoxHandlercHandler=newcheckBoxHandler();bold.addltemListener(cHandler);italic.addltemListener(cHandler);JPanelwordPanel=newJPanel();buttonPanel.add(bold);buttonPanel.add(italic);buttonPanel.add(styles);styles.setMinimumSize(newDimension(50,20));styles.setMaximumSize(newDimension。。。,20));Containerc=getContentPane();super.setJMenuBar(bar);c.add(buttonPanel,BorderLayout.NORTH);c.add(drawingArea,BorderLayout.CENTER);statusBar=newJLabel();c.add(statusBar,BorderLayout.SOUTH);statusBar.setText("");createNewItem();setSize(width,height);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setVisible(true);}//按钮侦听器ButtonHanler类,内部类,用来侦听基本按钮的操作publicclassButtonHandlerimplementsActionListener{publicvoidactionPerformed(ActionEvente){for(intj=3;j<choices.length-3;j++){if(e.getSource()==choices[j]){currentchoice=j;createNewItem();repaint();}}}}//按钮侦听器ButtonHanlerl类,用来侦听颜色选择、画笔粗细设置、文字输入按钮的操作publicclassButtonHandlerlimplementsActionListener{publicvoidactionPerformed(ActionEvente){if(e.getSource()==choices[choices.length-3]){chooseColor();}if(e.getSource()==choices[choices.length-2]){setStroke();}if(e.getSource()==choices[choices.length-1]){JOptionPane.showMessageDialog(null,"请点击绘图板选择输入文本的位置","提示",JOptionPane.INFORMATION_MESSAGE);currentchoice=14;createNewItem();repaint();}//鼠标事件mouseA类,继承了MouseAdapter,用来完成鼠标相应事件操作classmouseAextendsMouseAdapter{publicvoidmousePressed(MouseEvente){statusBar.setText("作者:吴斌伟一厦门理工学院数理系09级信计1班一鼠标按下位置:["+e.getX()+","+e.getY()+"]");//设置状态提示itemList[index].x1=itemList[index].x2=e.getX();itemList[index].y1=itemList[index].y2=e.getY();//如果当前选择的图形是随笔画或者橡皮擦,则进行下面的操作if(currentChoice==3||currentChoice==13){itemList[index].x1=itemList[index].x2=e.getX();itemList[index].y1=itemList[index].y2=e.getY();index++;createNewItem();}//如果当前选择的图形式文字输入,则进行下面操作if(currentChoice==14){itemList[index].x1=e.getX();itemList[index].y1=e.getY();Stringinput;input=JOptionPane.showInputDialog("请输入你想要输入的文本");itemList[index].s1=input;itemList[index].x2=f1;itemList[index].y2=f2;itemList[index].s2=style1;index++;currentchoice=14;createNewItem();drawingArea.repaint();}}publicvoidmouseReleased(MouseEvente){statusBar.setText("鼠标的位置:"+e.getX()+","+e.getY()+"]");if(currentChoice==3||currentChoice==13){itemList[index].x1=e.getX();itemList[index].y1=e.getY();}itemList[index].x2=e.getX();itemList[index].y2=e.getY();repaint();index++;createNewItem();}publicvoidmouseEntered(MouseEvente){statusBar.setText("鼠标的位置:["+e.getX()+","+e.getY()+"]");}publicvoidmouseExited(MouseEvente){statusBar.setText("鼠标的位置:["+e.getX()+","+e.getY()+"]");}}//鼠标事件mouseB类继承了MouseMotionAdapter,用来完成鼠标拖动和鼠标移动时的相应操作classmouseBextendsMouseMotionAdapter{publicvoidmouseDragged(MouseEvente){statusBar.setText("鼠标的位置:["+e.getX()+","+e.getY()+"]");if(currentChoice==3||currentChoice==13){itemList[index-1].x1=itemList[index].x2=itemList[index].x1=e.getX();itemList[index-1].y1=itemList[index].y2=itemList[index].y1=e.getY();index++;createNewItem();}else{itemList[index].x2=e.getX();itemList[index].y2=e.getY();}repaint();}publicvoidmouseMoved(MouseEvente){statusBar.setText("鼠标的位置:["+e.getX()+","+e.getY()+"]");}}//选择字体风格时候用到的事件侦听器类,加入到字体风格的选择框中privateclasscheckBoxHandlerimplementsItemListener{publicvoiditemStateChanged(ItemEvente){if(e.getSource()==bold)if(e.getStateChange()==ItemEvent.SELECTED)f1=Font.BOLD;elsef1=Font.PLAIN;if(e.getSource()==italic)if(e.getStateChange()==ItemEvent.SELECTED)f2=Font.ITALIC;elsef2=Font.PLAIN;}}//画图面板类,用来画图classDrawPanelextendsJPanel{publicDrawPanel(){setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));setBackground(Color.white);//鼠标监听事件addMouseListener(newmouseA());//鼠标移动监听事件addMouseMotionListener(newmouseB());}publicvoidpaintComponent(Graphicsg){super.paintComponent(g);Graphics2Dg2d=(Graphics2D)g;//定义画笔intj=0;while(j<=index){draw(g2d,itemListlj]);j++;}}voiddraw(Graphics2Dg2d,drawingsi){.draw(g2d);//将画笔传入到各个子类中,用来完成各自的绘图}}//新建一个画图基本单元对象的程序段voidcreateNewItem(){switch(currentChoice){itemList[index]=newPencil。;break;itemList[index]=newLine();break;itemList[index]=newRect();break;itemList[index]=newfillRect();break;itemList[index]=newOval();break;itemList[index]=newfillOval();break;itemList[index]=newCircle。;break;itemList[index]=newfillCircle();break;itemList[index]=newRoundRect();break;itemList[index]=newfillRoundRect();break;itemList[index]=newRubber。;break;itemList[index]=newWord();break;}itemList[index].type=currentChoice;itemList[index].R=R;itemList[index].G=G;itemList[index].B=B;itemList[index].stroke=stroke;}//选择当前颜色程序段publicvoidchooseColor(){color=JColorChooser.showDialog(DrawPad.this,”请选择一种颜色",color);R=color.getRed();G=color.getGreen();B=color.getBlue();itemList[index].R=R;itemList[index].G=G;itemList[index].B=B;}//选择当前线条粗细程序段publicvoidsetStroke(){Stringinput;input=JOptionPane.showInputDialog("请输入一个浮点型线条粗细值(>0)");stroke=Float.parseFloat(input);itemList[index].stroke=stroke;}//保存图形文件程序段publicvoidsaveFile(){JFileChooserfileChooser=newJFileChooser();fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);intresult=fileChooser.showSaveDialog(this);if(result==JFileChooser.CANCEL_OPTION)return;FilefileName=fileChooser.getSelectedFile();fileName.canWrite();if(fileName==null||fileName.getName().equals(""))JOptionPane.showMessageDialog(fileChooser,"文件名无效","文件名无效JOptionPane.ERROR_MESSAGE);else{try{fileName.delete();FileOutputStreamfos=newFileOutputStream(fileName);output=newObjectOutputStream(fos);drawingsrecord;output.writelnt(index);for(inti=0;i<index;i++){drawingsp=itemList[i];output.writeObject(p);output.flush();//将所有图形信息强制转换成父类线性化存储到文件中}output.close();fos.close();}catch(lOExceptionioe){ioe.printStackTrace();}}}//打开一个图形文件程序段,loadFile函数通过建立FileInputStream对象读入文件publicvoidloadFile(){JFileChooserfileChooser=newJFileChooser();fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);intresult=fileChooser.showOpenDialog(this);if(result==JFileChooser.CANCEL_OPTION)return;FilefileName=fileChooser.getSelectedFile();fileName.canRead();if(fileName==null||fileName.getName().equals(""))JOptionPane.showMessageDialog(fileChooser,"文件名无效",”文件名无效",JOptionPane.ERROR_MESSAGE);else{try{FileInputStreamfis=newFileInputStream(fileName);input=newObjectInputStream(fis);drawingsinputRecord;intcountNumber=0;countNumber=input.readInt();for(index=0;index<countNumber;index++){inputRecord=(drawings)input.readObject();itemList[index]=inputRecord;}createNewItem();input.close();repaint();}catch(EOFExceptionendofFileException){JOptionPane.showMessageDialog(this,"文件里没有更多的记录","无法找到类",JOptionPane.ERROR_MESSAGE);}catch(ClassNotFoundExceptionclassNotFoundException){JOptionPane.showMessageDialog(this,"不能创建对象","文件结束",JOptionPane.ERROR_MESSAGE);}catch(IOExceptionioException){JOptionPane.showMessageDialog(this,"从文件读取资料出错","读出错误",JOptionPane.ERROR_MESSAGE);}}}//新建一个文件程序段publicvoidnewFile(){index=0;currentChoice=3;color=Color.black;stroke=1.0f;createNewItem();repaint();〃将有关值设置为初始状态,并且重画}//主函数段publicstaticvoidmain(Stringargs[]){try{UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());}catch(Exceptione){}//将界面设置为当前windows风格DrawPadnewPad=newDrawPad();newPad.addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){System.exit(0);}});}}//定义画图的基本图形单元classdrawingsimplementsSerializable//父类,基本图形单元,用到串行化接口,保存时所用{intx1,y1,x2,y2;//定义坐标属性intR,G,B;〃定义色彩属性floatstroke;//定义线条粗细属性inttype;//定义字体属性Strings1;Strings2;//定义字体风格属性voiddraw(Graphics2Dg2d){};//定义绘图函数}/**************************************************下面是各种基本图形单元的子类,都继承自父类drawings,请仔细理解继承的概念**************************************************/classLineextendsdrawings//直线类{voiddraw(Graphics2Dg2d){g2d.setPaint(newColor(R,G,B));g2d.setStroke(newBasicStroke(stroke,BasicStroke.CAP_ROUND,BasicStroke.JOIN_BEVEL));g2d.drawLine(x1,y1,x2,y2);}}classRectextendsdrawings//矩形类{voiddraw(Graphics2Dg2d){g2d.setPaint(newColor(R,G,B));g2d.setStroke(newBasicStroke(stroke));g2d.drawRect(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x1-x2),Math.abs(y1-y2));}}classfillRectextendsdrawings//实心矩形类{voiddraw(Graphics2Dg2d){g2d.setPaint(newColor(R,G,B));g2d.setStroke(newBasicStroke(stroke));g2d.fillRect(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x1-x2),Math.abs(y1-y2));}}classOvalextendsdrawings//椭圆类{voiddraw

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论