java初级制图(画图)_第1页
java初级制图(画图)_第2页
java初级制图(画图)_第3页
java初级制图(画图)_第4页
java初级制图(画图)_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、初级制图画图从本讲开始我们就要学习终端Java技术了!终于开始学了啊。目前为止已经学习的编程基础一定会派上用场的,尼克要加油啊。本讲我们学习在终端上制作图画。1. 终端Java的life cycle在文章开始时谈到画图,那么首先从如何启动终端Java,如何使其运行开始讲起。这么说有电话挂进来时,程序会暂时停止是么?是这样的。每次电话进来时程序都会中止,相反若程序仍然运行不是很麻烦么。通话时游戏结束的话很讨厌啊。为了避免这种情况,在终端Java内定义了程序启动时、电话挂进来时以及程序结束时的处理。好方便啊。请看下图。终端Java的life cycle如下图所示。终端发出运行命令,调出defaul

2、t constructor (无自变量)。调出startApp(),开始MIDlet。电话等进来时,运行pasuseApp(),MIDlet停止。通话结束时,再运行startApp(),且再次打开MIDlet。停止MIDlet时,运行destroyApp(),MIDlet 停止。 博士,这里的default constructor是什么?这个呀。让我们用模板的source code来说明一下。import javax.microedition.lcdui.Display;import javax.microedition.lcdui.TextBox;import javax.microedit

3、ion.midlet.MIDlet;import javax.microedition.midlet.MIDletStateChangeException;/* * 程序模板 */public class Template extends MIDlet private Display display;private TextBox textbox;public Template() display = Display.getDisplay(this);textbox = new TextBox(, , 500, 0);display.setCurrent(textbox);protected

4、void pauseApp() protected void destroyApp(boolean arg0) throws MIDletStateChangeException protected void startApp() throws MIDletStateChangeException /从这里起以下写程序/从这里起以上写程序从14行到19行存在与类名相同名称的Templete方法。这个就是constructor。它起什么作用呢?作成类时,写在constructor内的处理会自动运行。也就是说,constructor是进行类的初始化的。哦哦。可是,这个模板的constructor是

5、做什么的呀?噢。好问题啊,从现在起我们就开始讲解这个问题了。2. 画图2.1. canvas为了在终端Java上画图,要使用Canvas类。好的。画图从Canvas类开始。尼克,你有没有注意到终端Java应用里面有许多画面?画面?是指上讲以前所学的显示文字,输入文字的画面么? 恩。是的。上一讲以前都是利用text box来显示文字的。另外也有选择要素的画面以及显示时钟的画面。而这一讲却要使用与以前完全不同的画面Canvas来显示graphic。import javax.microedition.lcdui.Canvas;import javax.microedition.lcdui.Displ

6、ay;import javax.microedition.lcdui.Graphics;import javax.microedition.midlet.MIDlet;import javax.microedition.midlet.MIDletStateChangeException;/* * 制图用模板 */public class Sample extends MIDlet private Display display;private Canvas canvas;protected void startApp() throws MIDletStateChangeException di

7、splay = Display.getDisplay(this);canvas = new TempleteCanvas();/初始化Canvas display.setCurrent(canvas);/显示Canvas protected void pauseApp() protected void destroyApp(boolean arg0) throws MIDletStateChangeException /* * 模板Canvas */class TempleteCanvas extends Canvas/* * 画图方法 * 记录画图处理 */protected void pa

8、int(Graphics g) /从这里起以下记录画图处理 /从这里起以上记录画图处理从41行到45行记录着画图处理。上面的source code是显示graphic的程序模板。增加了一个类呀。是的。利用Canvas时,除了主要的类之外,还需要一个显示graphic的Canvas类。这也挺难的啊。2.2. 画线首先我们先在画面上试着画线。是。画线的程序如下所示书写。g.drawLine(int 起点的x坐标,int 起点的y坐标,int 终点的x坐标,int终点的y坐标);使用这个试试从(10,10)到(100,100)画线,怎么样?应该是g.drawLine(10,10,100,100)吧。

9、对!但是坐标原点在哪里呢?恩?根据坐标原点的不同描画的情况应该也不相同。你说得对。坐标原点在画面的左上。N820的画面如下所示。左上角为原点,x轴的值向右逐渐变大,y轴的值向下逐渐变大。运行刚才的画线命令,如下所示。2.3. 描画四边形接下来我们试着画四边形。画四条线就行了吧。呵呵,是这样的。但Java里面也准备了专门描画四边形的方法。g.drawRect(int 定点的x坐标, int 定点的y坐标, int 高度, int 宽度);使用这个方法试试从(10,10)画高100宽100的正方形,应该怎么做? 应该是g.drawRect(10,10,100,100)。2.4. 画圆下面我们来画圆

10、。好的。画圆的命令如下所示。g.drawArc(int 圆左上的x坐标, int 圆左上的y坐标, int 圆的宽度, int 圆的高度, int 圆的开始角度, int 圆弧的角度);各变量的表示法见下图。调整圆的高度、宽度,有时也会出现椭圆的情况。这个图最初画圆时应该怎么做呢?考虑一下。呃,把height与width设为相同数值,arcAngle设为360怎么样?你这样做试试吧。g.drawArc(100,100,80,80,0,360);恩。画的不错呀。圆弧的角度在360度以下时画出来的是弧。2.5. 改变颜色一直都用黑线画,是不是比较无聊呢。是啊,我想用红色或者黄色试试看。呵呵,颜色的

11、变换方法如下所示。g.setColor(int 红色的值, int 绿色的值, int 蓝色的值);红色、绿色与蓝色组合可以生成各种各样的颜色。果然。它们是三原色嘛。那我们就画一下红色的四边形吧。g.setColor(255,0,0);g.drawRect(10,10,100,100);红线被画出来了。那么涂满颜色的四边形也能被画出来么?描画涂满颜色的四边形也有专门的命令。如下所示。g.fillRect(int x坐标, int y坐标, int 高度, int宽度);draw系的方法只是描画图形的线条,而fill系的方法则把图形涂满。2.6. 显示图像下面的程序就变的稍微有点长了。试试做一做

12、图像的显示,图像是指照片之类的么?是的,那就先来显示尼克的图像吧。N820可以显示PNG形式的图像。首先,要准备PNG形式的文件。好的。下面制作表示图像文件的image object。image object?关于object,反正以后还要学习object指向,到时再说明吧。在这里,请把它当作程序里读取图像文件的数据。image object的制作方法如下所示。Image image = Image.createImage(图像文件的路径);此时若设定了错误的图像文件路径,就会出现error。在Java里为避免此类error,准备了“例外处理”。也就是定义了例外error发生时的处理。例如,图

13、像文件的路径错误,这样就会导致例外error的出现是吗?是的。这时一般就会出现“图像文件的路径错误”等信息。如下所示书写例外处理。try例外发生处理;例外发生处理;catch(Exception e)例外发生时的处理;例外发生时的处理;使用例外处理读取图像的程序如下所示书写。此程序是在模拟器的message panel里显示例外的内容而进行的例外处理。Image image = null; / 指定保存图像数据的变量的宣言tryimage = Image.createImage(图像文件的路径);catch(Exception e)e.printStackTrace(); / 显示例外的内容上

14、面的语句表示在image变量里读取图像文件的数据。但是,只是读取数据还不能显示出来。也有显示用的命令吧。被你猜对了,显示命令的写法如下所示。g.drawImage(image, int 显示位置的x坐标, int 显示位置的y坐标, int anchor);博士!anchor是什么东西啊?问的好!所谓的anchor point,是指决定图像位置的基准点。定义anchor point时,利用逻辑计算符号|,分别指定横方向和纵方向的常数。Graphics.LEFTGraphics.HCENTERGraphics.RIGHTGraphics.TOPGraphics.BASELINEGraphics.

15、VCENTERGraphics.BOTTOM恩。好像有一些难啊。习惯就好了。指定anchor point为 Graphics.LEFT | Graphics.TOP后,变成下面所示的图。两个指定的ancho交叉就是anchor point。那么指定 Graphics.HCENTER | Graphics.VCENTER的情况下又是什么样子呢?在画面的中间显示?对!是这样的。让我们实际在画面中间显示尼克的图像看看。画面的尺寸为高255,宽240。这么说,中间的坐标是(120 , 127)啊。恩?那么图像文件放哪里好呢?噢,是啊是啊。对于Project,把source code保存到“src”文件

16、夹,再把“res”文件夹创建到“src”或者保存类文件的“bin”所在的文件夹内,在其中放置图像文件。接下来在模拟器中设定放置图像文件的文件夹。点击菜单的Options-MIDlet suite.。然后指定刚才保存图像文件的文件夹为Resource Directory。按“OK”键结束设定。这样的话会变成什么样子呢?Image image = null;try image = Image.createImage(/nicky.png); catch (IOException e) e.printStackTrace();g.drawImage(image,120,127,Graphics.HCENTER|Graphics.VCENTER);我的脸显示出来了!做的不错啊!可是anchor point的BASELINE是指哪里啊?所谓的BASELINE是指利用在画面中显示文字的anchor point,在显示图像时使用

温馨提示

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

评论

0/150

提交评论