《面向对象程序设计》实验报告实验十一绘制图形【实验目的】掌握使用图形类Graphics画出不同图形的方法。【实验内容】(选做一题)1.编写绘制圆形程序DrawOval.java。点击“确定”按钮时,在画布的指定位置画圆。2.编写移动方块程序MoveSquare.java。程序由二个类组成:窗体主类(表现层)负责控制,确定所有组件的位置,处理用户对方块的操作。画布MoveCanvas类(逻辑层)负责绘图,其paint负责绘制方块,其方法moveUp(),moveDown(),moveLeft(),moveRight()分别响应窗体主类actionPerformed()方法的对应的按钮事件,再调用repaint方法来刷新图像。2【实验报告】实习时间:实习地点:实习机号:具体实验内容1.编写绘制圆形程序DrawOval.java。点击“确定”按钮时,在画布的指定位置画圆。运行成功的程序为:importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.*;importjavax.swing.*;publicclassDrawOvalextendsJFrameimplementsActionListener{Ovalcanvascanvas;JTextFieldin_R,in_X,in_Y;JButtonbtn;publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubDrawOvalDrawOval=newDrawOval();}publicDrawOval(){super(画布上绘制圆);setSize(600,300);setVisible(true);canvas=newOvalcanvas();in_R=newJTextField(6);in_X=newJTextField(6);in_Y=newJTextField(6);setLayout(newFlowLayout());add(newJLabel(输入圆的位置坐标:));add(in_X);3add(in_Y);add(newJLabel(输入圆的半径:));add(in_R);btn=newJButton(确定);btn.addActionListener(this);add(btn);add(canvas);validate();setDefaultCloseOperation(EXIT_ON_CLOSE);}classOvalcanvasextendsCanvas{intx,y,r;voidOvalcanvas(){setSize(200,200);setBackground(Color.cyan);}publicvoidsetOval(intx,inty,intr){this.x=x;this.y=y;this.r=r;}publicvoidpaint(Graphicsg){g.drawOval(x,y,2*r,2*r);}}@OverridepublicvoidactionPerformed(ActionEvente){//TODOAuto-generatedmethodstubintx,y,r;try{x=Integer.parseInt(in_X.getText());y=Integer.parseInt(in_Y.getText());r=Integer.parseInt(in_R.getText());canvas.setOval(x,y,r);canvas.repaint();}catch(NumberFormatExceptionee){x=0;y=0;r=0;}}}结果截图:4下面为具体实验过程:(1)运行,出现错误,主要是“cannotberesolvedtoatype”的错误。WindowEventcannotberesolvedtoatypeGraphicscannotberesolvedtoatypeConstantcannotberesolvedtoavariableConstantcannotberesolvedtoavariable5(2)换了一个程序,运行,出现错误:Multiplemarkersatthisline-Syntaxerrorontoken(,deletethistoken-Syntaxerrorontoken),deletethistokenMultiplemarkersatthisline-Syntaxerrorontoken(s),misplacedconstruct(s)-Syntaxerrorontokenvoid,@expected-Syntaxerror,insertinterfaceIdentifiertocompleteInterfaceHeader(3)主窗体界面应该调研setOval(int[]x,int[]y,intN)变成画布类逻辑层。6(4)按照云课堂PPT的程序,输入,发现有如下错误:①Ovalcanvascannotberesolvedtoatype②SyntaxerrorontokenInvalidCharacter,;expected③JLablecannotberesolvedtoatype④SyntaxerrorontokenInvalidCharacter,;expected⑤Multiplemarkersatthisline-Ovalcanvascannotberesolvedtoatype-Ovalcanvascannotberesolvedtoatype⑥Exceptioninthreadmainjava.lang.Error:Unresolvedcompilationproblem:atDrawOval.main(DrawOval.java:9)7(5)第35行classOvalCanvasextendsCanvas应该改为“classOvalcanvasextendsCanvas”,没有注意大小写。(6)第14行“super(画布上绘制圆);”这里的“;”有问题,忘了使用英文符号。8(7)将以下程序:x=Integer.parseInt(jl1.getText());y=Integer.parseInt(jl2.getText());r=Integer.parseInt(jl3.getText());改为:x=Integer.parseInt(in_X.getText());y=Integer.parseInt(in_Y.getText());r=Integer.parseInt(in_R.getText());(8)经过观察,发现我之所以会出现“JLablecannotberesolvedtoatype”的错误,是因为我把“JLabel”写出了”JLable”.9(9)经改善以上一系列程序错误以后,我运行程序,程序能运行成功,但是当我输入圆的半径及位置坐标之后,点击“确定”却无法画出一个与之相对应的圆。明明程序是和老师PPT里的程序是一样的,但就是画不出圆来。(10)在以上问题的基础上,首先,我将第8行的代码“JLabeljl1,jl2;”删除。10(11)其次,我将第22及23行的代码jl1=newJLabel(输入圆的位置坐标:);this.add(jl1);改为:add(newJLabel(输入圆的位置坐标:));11(12)最后,我将第25及26的代码jl2=newJLabel(输入圆的半径:);this.add(jl2);改为:add(newJLabel(输入圆的半径:));12(13)最后的最后,经过一系列对该程序的摸索及改正,运行成功,结果截图为:13实习小结1.实验一主要是卡在“cannotberesolvedtoatype”这里,比如说:Ellipse2Dcannotberesolvedtoatype(椭圆不能被解析为类型)等“cannotberesolvedtoatype”的类似错误。这部分错误主要是因为没有注意英文字母的大小写以及中英式字符的使用而导致的,比如说将“JLabel”写成了”JLable”则会出现“JLablecannotberesolvedtoatype”的错误。在以后的实验中还是要多注意字母的大小写这类小问题,因为代码总是英文和中文互用,很容易搞混。2.实验一还卡在以下错误:①OvalCanvascannotberesolvedtoatype(主要是因为“Ovalcanvas”写成了“OvalCanvas”,字母大小写的问题。②SyntaxerrorontokenInvalidCharacter,;expected。(符号“;”没有用英文字符“;”的缘故)。3.对于实验一,主要是要掌握“主窗体界面应该调研setOval(int[]x,int[]y,intN)变成画布类逻辑层”的知识点。难写的程序是以下部分:intx,y,r;try{x=Integer.parseInt(in_X.getText());y=Integer.parseInt(in_Y.getText());r=Integer.parseInt(in_R.getText());14canvas.setOval(x,y,r);canvas.repaint();}catch(NumberFormatExceptionee){x=0;y=0;r=0;}4.其实这个实验我是在参考老师云课堂PPT才写出来的。在做该实验的过程中,犯了很多不应该犯的低级错误,特别是英文字母的大小写及中英式字符的运用这些低级错误,在以后的实验中,我要更加注意这方面的问题。