您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > linux/Unix相关 > java初级制图(画图)
初级制图-画图ー1.终端Java的lifecycle从本讲开始我们就要学习终端Java技术了!终于开始学了啊。目前为止已经学习的编程基础一定会派上用场的,尼克要加油啊。本讲我们学习在终端上制作图画。在文章开始时谈到画图,那么首先从如何启动终端Java,如何使其运行开始讲起。这么说有电话挂进来时,程序会暂时停止是么?是这样的。每次电话进来时程序都会中止,相反若程序仍然运行不是很麻烦么。通话时游戏结束的话很讨厌啊。为了避免这种情况,在终端Java内定义了程序启动时、电话挂进来时以及程序结束时的处理。好方便啊。请看下图。终端Java的lifecycle如下图所示。1.终端发出运行命令,调出defaultconstructor(无自变量)。2.调出startApp(),开始MIDlet。3.电话等进来时,运行pasuseApp(),MIDlet停止。4.通话结束时,再运行startApp(),且再次打开MIDlet。5.停止MIDlet时,运行destroyApp(),MIDlet停止。importjavax.microedition.lcdui.Display;1importjavax.microedition.lcdui.TextBox;2importjavax.microedition.midlet.MIDlet;3importjavax.microedition.midlet.MIDletStateChangeException;45/**6*程序模板7*/8publicclassTemplateextendsMIDlet{910privateDisplaydisplay;11privateTextBoxtextbox;1213publicTemplate(){14博士,这里的defaultconstructor是什么?这个呀。让我们用模板的sourcecode来说明一下。display=Display.getDisplay(this);15textbox=newTextBox(,,500,0);1617display.setCurrent(textbox);18}1920protectedvoidpauseApp(){21}22protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException23{24}2526protectedvoidstartApp()throwsMIDletStateChangeException{27//从这里起以下写程序282930//从这里起以上写程序31}32}33从14行到19行存在与类名相同名称的Templete方法。这个就是constructor。它起什么作用呢?作成类时,写在constructor内的处理会自动运行。也就是说,constructor是进行类的初始化的。哦哦。可是,这个模板的constructor是做什么的呀?噢。好问题啊,从现在起我们就开始讲解这个问题了。2.画图2.1.canvasimportjavax.microedition.lcdui.Canvas;1importjavax.microedition.lcdui.Display;2importjavax.microedition.lcdui.Graphics;3importjavax.microedition.midlet.MIDlet;4importjavax.microedition.midlet.MIDletStateChangeException;567/**8*制图用模板9*/10publicclassSampleextendsMIDlet{1112privateDisplaydisplay;13privateCanvascanvas;1415protectedvoidstartApp()throwsMIDletStateChangeException{1617display=Display.getDisplay(this);1819canvas=newTempleteCanvas();//初始化Canvas20为了在终端Java上画图,要使用Canvas类。好的。画图从Canvas类开始。尼克,你有没有注意到终端Java应用里面有许多画面?画面?是指上讲以前所学的显示文字,输入文字的画面么?恩。是的。上一讲以前都是利用textbox来显示文字的。另外也有选择要素的画面以及显示时钟的画面。而这一讲却要使用与以前完全不同的画面Canvas来显示graphic。display.setCurrent(canvas);//显示Canvas21}2223protectedvoidpauseApp(){24}2526protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException{27}28}2930/**31*模板Canvas32*/33classTempleteCanvasextendsCanvas{3435/**36*画图方法37*记录画图处理38*/39protectedvoidpaint(Graphicsg){40//从这里起以下记录画图处理41424344//从这里起以上记录画图处理45}46}472.2.画线g.drawLine(int起点的x坐标,int起点的y坐标,int终点的x坐标,int终点的y坐标);上面的sourcecode是显示graphic的程序模板。增加了一个类呀。是的。利用Canvas时,除了主要的类之外,还需要一个显示graphic的Canvas类。这也挺难的啊。。。首先我们先在画面上试着画线。是。画线的程序如下所示书写。从41行到45行记录着画图处理。(0,0)(240,0)(240,255)(0,255)xy使用这个试试从(10,10)到(100,100)画线,怎么样?应该是g.drawLine(10,10,100,100)吧。对!但是坐标原点在哪里呢?恩?根据坐标原点的不同描画的情况应该也不相同。。。你说得对。坐标原点在画面的左上。N820的画面如下所示。运行刚才的画线命令,如下所示。左上角为原点,x轴的值向右逐渐变大,y轴的值向下逐渐变大。2.3.描画四边形g.drawRect(int定点的x坐标,int定点的y坐标,int高度,int宽度);接下来我们试着画四边形。画四条线就行了吧。呵呵,是这样的。但Java里面也准备了专门描画四边形的方法。使用这个方法试试从(10,10)画高100宽100的正方形,应该怎么做?应该是g.drawRect(10,10,100,100)。2.4.画圆g.drawArc(int圆左上的x坐标,int圆左上的y坐标,int圆的宽度,int圆的高度,int圆的开始角度,int圆弧的角度);下面我们来画圆。好的。画圆的命令如下所示。各变量的表示法见下图。g.drawArc(100,100,80,80,0,360);这个图最初画圆时应该怎么做呢?考虑一下。呃,把height与width设为相同数值,arcAngle设为360怎么样?你这样做试试吧。调整圆的高度、宽度,有时也会出现椭圆的情况。2.5.改变颜色g.setColor(int红色的值,int绿色的值,int蓝色的值);恩。画的不错呀。圆弧的角度在360度以下时画出来的是弧。一直都用黑线画,是不是比较无聊呢。是啊,我想用红色或者黄色试试看。呵呵,颜色的变换方法如下所示。红色、绿色与蓝色组合可以生成各种各样的颜色。果然。它们是三原色嘛。那我们就画一下红色的四边形吧。g.setColor(255,0,0);g.drawRect(10,10,100,100);g.fillRect(intx坐标,inty坐标,int高度,int宽度);那么涂满颜色的四边形也能被画出来么?描画涂满颜色的四边形也有专门的命令。如下所示。红线被画出来了。2.6.显示图像Imageimage=Image.createImage(图像文件的路径);下面的程序就变的稍微有点长了。试试做一做图像的显示,图像是指照片之类的么?是的,那就先来显示尼克的图像吧。N820可以显示PNG形式的图像。首先,要准备PNG形式的文件。好的。下面制作表示图像文件的imageobject。imageobject??关于object,反正以后还要学习object指向,到时再说明吧。在这里,请把它当作程序里读取图像文件的数据。imageobject的制作方法如下所示。draw~系的方法只是描画图形的线条,而fill~系的方法则把图形涂满。try{1例外发生处理;2例外发生处理;3・4・5}catch(Exceptione){6例外发生时的处理;7例外发生时的处理;8・9・10}11Imageimage=null;//指定保存图像数据的变量的宣言1try{2image=Image.createImage(图像文件的路径);3}catch(Exceptione){4e.printStackTrace();//显示例外的内容5}6此时若设定了错误的图像文件路径,就会出现error。在Java里为避免此类error,准备了“例外处理”。也就是定义了例外error发生时的处理。例如,图像文件的路径错误,这样就会导致例外error的出现是吗?是的。这时一般就会出现“图像文件的路径错误”等信息。如下所示书写例外处理。使用例外处理读取图像的程序如下所示书写。此程序是在模拟器的messagepanel里显示例外的内容而进行的例外处理。上面的语句表示在image变量里读取图像文件的数据。但是,只是读取数据还不能显示出来。也有显示用的命令吧。被你猜对了,显示命令的写法如下所示。g.drawImage(image,int显示位置的x坐标,int显示位置的y坐标,intanchor);横方向纵方向Graphics.LEFTGraphics.HCENTERGraphics.RIGHTGraphics.TOPGraphics.BASELINEGraphics.VCENTERGraphics.BOTTOM(x,y)TOPBOTTOMVCENTERLEFTRIGHTHCENTER博士!anchor是什么东西啊?问的好!所谓的anchorpoint,是指决定图像位置的基准点。定义anchorpoint时,利用逻辑计算符号「|」,分别指定横方向和纵方向的常数。恩。好像有一些难啊。。。习惯就好了。指定anchorpoint为「Graphics.LEFT|Graphics.TOP」后,变成下面所示的图。那么指定「Graphics.HCENTER|Graphics.VCENTER」的情况下又是什么样子呢?在画面的中间显示?两个指定的ancho交叉就是anchorpoint。(x,y)TOPBOTTOMVCENTERLEFTRIGHTHCENTER/projecttop/src/bin/res在这里放置图像文件对!是这样的。让我们实际在画面中间显示尼克的图像看看。画面的尺寸为高255,宽240。这么说,中间的坐标是(120,127)啊。恩??那么图像文件放哪里好呢?噢,是啊是啊。对于Project,把sourcecode保存到“src”文件夹,再把“res”文件夹创建到“src”或者保存类文件的“bin”所在的文件夹内,在其中放置图像文件。接下来在模拟器中设定放置图像文件的文件夹。点击菜单的Options-MIDletsuite...。Imageimage=null;1try{2image=Image.createImage(/nicky.png);3}catch(IOExceptione){4e.printStackTrace();5}6g.drawImage(image,120,127,Graphics.HCENTER|Graphics.VCENTER);7然后指定刚才保存图像文件的文件夹为「ResourceDirectory」。按“
本文标题:java初级制图(画图)
链接地址:https://www.777doc.com/doc-7028383 .html