九
MIDP低级图形处理
MIDP所提供的图形处理方法都在javax.microedition.lcdui里面。主要是如下几个类:Display,Graphic
s,Canvas,Font,Image。
1、Display:
在每个MIDlet之中是由一个Display,属于用Singleton
Pattern所封装起来的类别,需要使用getDisplay来取得。当使用setCurrent()方法,并同时将一个Dis
playable的子类作为参数就可以在屏幕上显示相关的画面。也可一用getCurrent()获取当前正在作用的
Displayable的对象。同时为了取得屏幕相关的属性可以使用isColor()返回屏幕是否为彩色,numColors(
)返回屏幕所支持的彩色数,如果返回值为2则为黑白两色。每当Display的setCurrent方法得到Canvas子
类作为参数的时候,MIDP系统会执行paint方法并将Graphics对象当作参数。里面有一点需要注意,由于
手持设备的屏幕大小并不是固定的,所以我们在填充背景色,前景色的时候有必要通过getWidth(),getHe
ight()两个方法取得屏幕的长、宽。
2、Image:
处理图形的时候会使用到Image类,根据Image类的产生方式可以分为可修改和不可修改的两个方面。
可以通过isMutable方法得到此Image类是否可以修改。还可以通过getWidth(),getHeight()方法取得Imag
e对象的长,宽。
可以通过读取图像文件,网络下载,resource bundle等方式创建一个不可修改的image对象。一旦创
建不可修改image对象,那么这个图像的内容将不可再次更改。
package com.graph;
/**
* @author You Li
*
* CopyRight (C) 2005 */
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class ImageEx extends MIDlet implements CommandListener {
private Command cmdExit;
private ImageCanvas canvas;
public ImageEx() {
cmdExit = new Command("Exit", Command.SCREEN, 2);
canvas = new ImageCanvas();
// TODO 自动生成构造函数存根
}
protected void startApp() throws MIDletStateChangeException {
// TODO 自动生成方法存根
canvas.addCommand(cmdExit);
canvas.setCommandListener(this);
Display.getDisplay(this).setCurrent(canvas);
}
protected void pauseApp() {
// TODO 自动生成方法存根
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
// TODO 自动生成方法存根
}
public void commandAction(Command command, Displayable screen){
if (command == cmdExit){
notifyDestroyed();
}
}
}
package com.graph;
/**
* @author You Li
*
* CopyRight (C) 2005 */
import javax.microedition.lcdui.*;
public class ImageCanvas extends Canvas {
public void paint(Graphics g){
try{
Image image = Image.createImage("/JavaPowered-2.png");
g.drawImage(image, 0, 0, Graphics.TOP|Graphics.LEFT);
}catch(Exception e){
e.printStackTrace();
}
}
}
建立如上两个类,然后运行程序就可以看到图片显示在模拟器的屏幕上了。例子中我们用createImage
读取一个存在的图片来建立一个不可更改的Image对象。还有另外两个构造函数也是用来建立相同的image
对象,一个是createImage(byte[] imagedata,int imageoffset,int
imageLength),还有一个就是createImage(Image source)。
当然,如果我们要构建一个可以修改的image对象那么可以使用构造函数createImage(int width,int
height)。因为一个可修改的image对象实际就是能否在背景画图的off scree,所以在建立一个可以修改
的image对象之前应该使用Canvas的isDoubleBuffered()方法确定设备是否支持此方法。
font 字体
Font.getDefaultFont()--得到系统默认的字体。
Font.getFont()--得到当前所使用的字体。(getFace()『isBold();isItalic();isPlain();
isUnderlined()』,getStyle(),getSize())
Font.setFont()--设置字体
关于font一共有三个参数:
face:Graphics.FACE_MONOSPACE;Graphics.FACE_PROPORTIONAL;Graphics.FACE_SYSTEM
style:Graphics.STYLE_BOLD;Graphics.STYLE_ITALIC;Graphics.STYLE_PLAIN;
Graphics.STYLE_UNDERLINED
size:Graphics.SIZE_LARGE;Graphics.SIZE_MEDIUM;Graphics.SIZE_SMALL
关于font的几个重要的方法:
getBaseLinePosition();getHeight();charWidth();charsWidth();stringWidth();
substringWidth()
定位点:
定位点定义了7个屏幕点:Graphics.TOP;Graphics.BOTTOM;Graphics.LEFT;Graphics.RIGHT;
Graphics.HCENTER;Graphics.VCENTER;Graphics.BASELINE。
3、Graphics
取得Graphics对象有两个方法,用paint()方法传入参数,还可以用Image类的getGraphics方法来得到Graphics对象。两者区别在于paint方法得到的Graphics对象我们可以利用相关方法在屏幕上绘图,而利用getGraphics方法得到的Graphics对象对任何呼叫不起作用。
画图的时候我们在图形相关方法中使用的坐标不是代表象素本身,而是指象素与象素之间空格所构成的坐标!这个和我们传统的笛卡儿坐标的概念有些去表,而且是以屏幕左上方为0,0坐标。
Graphics对象的setColor(int red,int green,int blue)方法用来设置象素的颜色。getGrayScale()取得目前所用的灰度,setGrayScale()则是用来设置灰度。MIDP中没有提供设置前景色背景色的方法,所以必须通过填充来处理。
文字以及图形
文字使用drawChar(),drawChars(),drawString()
图形使用drawImage()
画图以及画面填充
线:drawLine(),有4个参数,分别输入x,y起点左边,x,y终点坐标
弧形:drawArc(),6个参数,前4个表示弧形所在的矩形范围的坐标,第五个决定起始角度,第 六个决定弧形所涵盖第角度。
矩形:drawRect(),4个参数,x、y起点坐标,宽,长
园角矩形:drawRoundRect() 6个参数,前4个表示弧形所在的矩形范围的坐标,第五个是园角所 在矩形第宽度,第六个表示矩形的高度。
填充弧形:fillArc(),6个参数,前四个决定弧形所在矩形的范围,第五个决定起始角度,第六个决定弧形所涵盖的角度
填充矩形:fillRect(),4个参数,x、y起点坐标,宽,长
填充园角矩形:fillRoundRect(),6个参数,前4个表示弧形所在的矩形范围的坐标,第五个是 园角所在矩形第宽度,第六个表示矩形的高度。
<script type="text/javascript">&amp;amp;lt;!--google_ad_client = "pub-3051157228350391";google_alternate_color = "FF0000";google_ad_width = 336;google_ad_height = 280;google_ad_format = "336x280_as";google_ad_channel ="9050871643";google_page_url = document.location;google_color_border = "CCCCCC";google_color_bg = "FFFFFF";google_color_link = "000000";google_color_url = "666666";google_color_text = "333333";//--&amp;amp;gt;</script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script><iframe name="google_ads_frame" allowtransparency="65535" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-3051157228350391&amp;dt=1112786052046&amp;prev_fmts=336x280_as&amp;format=336x280&amp;output=html&amp;u_h=768&amp;u_w=1024&amp;u_ah=740&amp;u_aw=1024&amp;u_cd=32&amp;u_tz=480&amp;u_his=3&amp;u_java=true" marginwidth="0" height="280" frameborder="0" scrolling="no" width="336" marginheight="0"></iframe><iframe name="google_ads_frame" allowtransparency="65535" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-3051157228350391&amp;dt=1112786057593&amp;prev_fmts=336x280_as%2C336x280&amp;format=336x280&amp;output=html&amp;u_h=768&amp;u_w=1024&amp;u_ah=740&amp;u_aw=1024&amp;u_cd=32&amp;u_tz=480&amp;u_his=3&amp;u_java=true" marginwidth="0" height="280" frameborder="0" scrolling="no" width="336" marginheight="0"></iframe>
分享到:
相关推荐
j2me学习笔记【1】——helloworld程序示例 j2me学习笔记【2】——利用Display类的isColor()方法获取设备是否支持彩色的信息 j2me学习笔记【3】——简单的在线帮助示例 j2me学习笔记【4】——Item类的学习 j2me学习...
根据提供的标题、描述、标签及部分内容,我们可以提炼出关于J2ME的学习笔记中的关键知识点,主要聚焦于Java语言的基础概念,特别是与初始化和字符串相关的部分。 ### 初始化 #### 概述 - **成员变量初始化**:所有...
**J2ME学习笔记概述** 本《J2ME学习笔记》是2009年度的一份详尽教程,旨在帮助初学者快速入门J2ME(Java Micro Edition)开发。这份笔记精心编排,以深入浅出的方式讲解了J2ME的基础知识和核心概念,为学习者提供了...
这个压缩包“j2Me 实例 笔记源码”提供了丰富的J2ME编程实例,帮助开发者深入理解和实践J2ME技术。 在J2ME中,你将接触到以下核心知识点: 1. **基础架构**:J2ME由配置(Configurations)和 profiles 组成。配置...
**J2ME超级学习笔记** Java Micro Edition(J2ME)是Java技术的一个重要分支,主要针对嵌入式设备和移动设备,如手机、智能家电等。本学习笔记旨在为Java初学者和开发者提供深入理解J2ME平台的全面指南。 1. **...
**J2ME学习笔记概述** Java 2 Micro Edition(J2ME)是Java平台的一个子集,主要用于开发和部署在嵌入式设备、移动电话、智能卡和其他资源受限的设备上的应用程序。本学习笔记旨在帮助读者理解J2ME的基础概念、架构...
**正文** J2ME(Java 2 Micro Edition)是Java平台的...通过深入学习和实践这些J2ME开发教程及笔记,开发者可以熟练掌握在移动设备上构建功能丰富的应用程序,并理解如何优化性能,以适应不同类型的嵌入式和移动设备。
### J2ME 学习笔记综合知识点概览 #### 第一章 体系介绍与环境配置 **1.1 前言** - **背景介绍**:J2ME(Java 2 Platform, Micro Edition)是Java平台的一个版本,专门用于移动设备、嵌入式设备和消费电子产品。 ...
**J2ME手机编程笔记** J2ME,全称Java 2 Micro Edition,是Java平台的一个子集,专为资源有限的嵌入式设备,如移动电话和PDA设计。这个编程笔记主要涵盖了从开发环境的搭建到J2ME的基本原理,以及相关类的使用,...
本篇笔记将深入探讨WAP页面处理技术,特别是WML(Wireless Markup Language)的使用。 WML是WAP的一种标记语言,类似于HTML,但设计时考虑了移动设备的屏幕大小和有限的资源。WML文档以XML为基础,由一系列的卡片...
【J2ME五子棋开发笔记】是一份详尽的文档,主要讲解如何使用Java Micro Edition (J2ME) 平台开发一个五子棋游戏。J2ME是Java为移动设备和嵌入式设备提供的一个框架,适用于开发手机游戏和其他小型应用程序。 1. **...
里面一些别人开发J2ME时记录的笔记,希望对大家学习有些帮助。互通有无。
学习J2ME应用开发,你需要熟悉MIDlet的概念,它是J2ME应用程序的基本单元,运行在MIDP环境中。MIDlets有生命周期,包括初始化、显示、暂停、恢复和终止等状态,开发者需要理解如何管理这些状态来确保应用的正确运行...
郭克华的J2EE与J2ME笔记以及Android系统源码样例是针对Java开发者的重要资源集合,涵盖了从企业级应用开发到移动设备编程的广泛领域。J2EE(Java 2 Platform, Enterprise Edition)是Java平台的一个版本,专为构建可...
总的来说,这个J2ME五子棋人机对弈开发项目涵盖了基础的J2ME UI设计、事件处理、游戏逻辑以及简单的AI算法实现,对于初学者来说,这是一个很好的学习实践项目,能够全面了解移动游戏开发的基础知识。
Java学习笔记主要涉及Java语言的历史背景、语言特点、应用平台和学习建议。以下是对这些内容的详细解析: ### Java语言的历史背景 Java起源于1990年代初的Sun公司(现为Oracle公司的一部分)的“绿色项目”计划,...
### 韩顺平编写的Java学习笔记概览 #### Java平台分类与运行机制 - **J2SE(Java 2 Platform, Standard Edition)**: 标准版Java开发平台,适用于桌面应用程序开发。 - **J2EE(Java 2 Platform, Enterprise ...