使用NetBeans进行J2ME开发(三):低级图形用户界面Canvas
在这一篇中,我将向大家介绍图形用户界面中的低级图形用户界面。所谓低级图形用户界面,指的是那种我们可以自己在上面画图的控件,它是和TextBox, List等等这些用户控件刚好相对的概念,因为这些用户控件的形状是事先画好的,无需我们程序员操心,所以称为高级图形界面。低级图形用户界面什么东西都 需要我们自己画,所以比较复杂,当然也更加灵活,只有想不到,没有画不出,所以我们先介绍它。
在J2ME开发中,低级图形用户界面是 由javax.microedition.lcdui.Canvas类实现的,我们只要继承这个类,并实现这个类的paint方法,就可以随心所欲的进行 绘画了。当然,绘画之前,我们少不了要了解我们的手机屏幕究竟有多大的画图空间,这可以通过调用Canvas类的getWidth和getHeight方 法实现。下面是一个简短的程序,向大家演示了怎么获画布的大小,同时,也算是一个小小的框架。首先,当然是创建我们自己的画布,代码如下:
packagecom.xkland.j2me;
importjavax.microedition.lcdui.Canvas;
importjavax.microedition.lcdui.Graphics;
/***//**
*
*@author海边沫沫
*/
publicclassMyCanvasextendsCanvas{
/***//**CreatesanewinstanceofMyCanvas*/
publicMyCanvas(){
}
publicvoidclearBackground(Graphicsg){
intcolor=g.getColor();
g.setColor(0xffffff);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(color);
}
publicvoidpaint(Graphicsg){
//清除背景
clearBackground(g);
//显示可供绘图的区域的大小
g.drawString("宽度:",10,10,Graphics.LEFT|Graphics.TOP);
g.drawString(String.valueOf(getWidth()),50,10,Graphics.LEFT|Graphics.TOP);
g.drawString("高度:",10,25,Graphics.LEFT|Graphics.TOP);
g.drawString(String.valueOf(getHeight()),50,25,Graphics.LEFT|Graphics.TOP);
}
}
第二个类当然就是我们的Midlet了,因为它是主程序嘛。在程序启动的时候调用display.setCurrent将画布设置为主界面,同时设置事件监听器。代码比较简单,如下:
packagecom.xkland.j2me;
importjavax.microedition.midlet.*;
importjavax.microedition.lcdui.*;
/***//**
*
*@author海边沫沫
*@version
*/
publicclassCanvasTestextendsMIDlet{
privateCanvascanvas=newMyCanvas();
privateDisplaydisplay=null;
privateCommandexitCommand=newCommand("退出",Command.EXIT,1);
publicvoidstartApp(){
if(display==null){
display=Display.getDisplay(this);
canvas.addCommand(exitCommand);
canvas.setCommandListener(newMyCommandListener(this,canvas));
display.setCurrent(canvas);
}
}
publicvoidpauseApp(){
}
publicvoiddestroyApp(booleanunconditional){
}
}
第三个类当然是我们的事件监听器类了,等一下我们会讲到,Canvas支持许多低级事件,比如键盘的按键事件,所以我们这里把事件监听器单独抽取出来,代码如下:
packagecom.xkland.j2me;
importjavax.microedition.lcdui.CommandListener;
importjavax.microedition.lcdui.Command;
importjavax.microedition.lcdui.Displayable;
importjavax.microedition.lcdui.Canvas;
/***//**
*
*@author海边沫沫
*/
publicclassMyCommandListenerimplementsCommandListener{
privateCanvasTestapp;
privateCanvascanvas;
/***//**CreatesanewinstanceofMyCommandListener*/
publicMyCommandListener(CanvasTestapp,Canvascanvas){
this.app=app;
this.canvas=canvas;
}
publicvoidcommandAction(Commandcmd,Displayabledisplayable){
if(cmd.getLabel().equalsIgnoreCase("退出")){
app.destroyApp(false);
app.notifyDestroyed();
}
}
}
下面是运行效果:
知道了画图区域的大小,同时又知道Canvas可以支持许多低级事件,我们就可以发挥我们自己的想象力创建一个小游戏了。下面,我将写一个简单的拼图游 戏,只需要使用上下左右四个方向键操作即可,在事件监听器中,我们只需响应Canvas的keyPressed()事件即可。代码也不复杂,只需把上面的 程序稍加扩展即可。当然,我们还需要准备一些图片当素材。
首先,在网上随便找一张图片,使用图形编辑软件调整图片的大小,然后再裁成 3*4共12幅图象。把这12幅图象分别命名为1.png到12.png,同时还要准备一张全白的图片,命名为0.png,这张图片和前面的12张图片一 样大小。在项目所在的文件夹下建立一个文件夹,取名为pictures,把这些图片都拷贝进去。在NetBeans IDE左边的文件选项卡中可以看到这些文件,如图:
但是,在生成项目的时候,这些文件并不会自动打包到项目中,我们必须将这个文件夹捆绑为该项目的资源。在项目上点右键,在弹出的菜单中选择属性,弹出如下对话框,选中左边的“库和资源”,在右边点击“添加文件夹”按钮即可:
下面是我的MyCanvas类的全部代码,其它两个类的代码没有改变。在这里,我使用的图片是174*280的大小,切割后的小图片每一个都是58*70的大小,空白的图片也是58*70的大小。请看代码:
packagecom.xkland.j2me;
importjavax.microedition.lcdui.Canvas;
importjavax.microedition.lcdui.Graphics;
importjavax.microedition.lcdui.Image;
importjava.util.Random;
/***//**
*
*@author海边沫沫
*/
publicclassMyCanvasextendsCanvas{
publicint[][]pics=newint[4][4];
publicImage[]images=newImage[13];
publicintstep=0;
publicintspaceX=3;
publicintspaceY=0;
publicintspaceValue=0;
/***//**CreatesanewinstanceofMyCanvas*/
publicMyCanvas(){
//随机填充数组
for(inti=0;i<4;i++){
for(intj=0;j<3;j++){
pics[i][j]=i*3+j+1;
}
}
pics[0][3]=0;
Randomrand=newRandom();
for(inti=0;i<4;i++){
intx1=rand.nextInt(3);
inty1=rand.nextInt(4);
intx2=rand.nextInt(3);
inty2=rand.nextInt(4);
intn=pics[y1][x1];
pics[y1][x1]=pics[y2][x2];
pics[y2][x2]=n;
}
//载入图片
for(inti=0;i<13;i++){
try{
images[i]=Image.createImage("/"+String.valueOf(i)+".png");
}catch(Exceptione){
//不做处理
}
}
}
publicvoidclearBackground(Graphicsg){
intcolor=g.getColor();
g.setColor(0xcccccc);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(color);
}
publicvoidpaint(Graphicsg){
//清除背景
clearBackground(g);
//绘制网格
g.setColor(0x000000);
g.drawRect(1,3,236,284);
g.drawLine(1,74,237,74);
g.drawLine(1,145,178,145);
g.drawLine(1,216,178,216);
g.drawLine(60,3,60,287);
g.drawLine(119,3,119,287);
g.drawLine(178,3,178,287);
//根据pics数组和images数组的内容绘图到网格中
for(inti=0;i<4;i++){
for(intj=0;j<3;j++){
g.drawImage(images[pics[i][j]],j*59+2,i*71+4,Graphics.TOP|Graphics.LEFT);
}
}
g.drawImage(images[pics[0][3]],179,4,Graphics.TOP|Graphics.LEFT);
//绘制所用的步骤
g.drawString("步数:",182,140,Graphics.TOP|Graphics.LEFT);
g.setColor(0xffffff);
g.fillRect(182,158,50,18);
g.setColor(0xff0000);
g.drawString(String.valueOf(step),187,160,Graphics.TOP|Graphics.LEFT);
}
publicvoidkeyPressed(intkeyCode){
switch(getGameAction(keyCode)){
caseRIGHT:
right();
break;
caseLEFT:
left();
break;
caseUP:
up();
break;
caseDOWN:
down();
break;
}
repaint();
}
publicvoidup(){
if(spaceY<3){
pics[spaceY][spaceX]=pics[spaceY+1][spaceX];
pics[spaceY+1][spaceX]=0;
spaceY++;
step++;
}
}
publicvoiddown(){
if(spaceY>0){
pics[spaceY][spaceX]=pics[spaceY-1][spaceX];
pics[spaceY-1][spaceX]=0;
spaceY--;
step++;
}
}
publicvoidleft(){
intrightLimit=2;
if(spaceY==0){
rightLimit=3;
}
if(spaceX<rightLimit){
pics[spaceY][spaceX]=pics[spaceY][spaceX+1];
pics[spaceY][spaceX+1]=0;
spaceX++;
step++;
}
}
publicvoidright(){
if(spaceX>0){
pics[spaceY][spaceX]=pics[spaceY][spaceX-1];
pics[spaceY][spaceX-1]=0;
spaceX--;
step++;
}
}
}
运行项目,得到如下的效果,使用上下左右四个键可以移动图片:
游戏过程中的截图:
游戏完成后的截图:
当然,大家也可以自己添加拼图完成后的判断代码,在拼图成功后自动弹出提示信息。
分享到:
相关推荐
使用NetBeans开发J2ME应用程序
如何使用Netbeans调试J2ME应用程序.rar
使用netbeans开发的简单图形动画,源码附带注解,供学习交流使用
J2me开发环境搭建 基本环境 安装jdk,配置环境变量,wtk 可选 1.就以上几种 2.以上几种+Eclipse+MyEclipse(一个移动开发的插件) 3.以上几种+Netbeans
使用NetBeans进行基础JSF开发 JSF入们 初学
netBeans J2ME PDA 手机 编程入门
NetBeans IDE 6.0 用户界面设计
NULL 博文链接:https://wsc830719.iteye.com/blog/601504
计算器,用netbeans开发,图形界面,下载后,将扩展名改为.rar,然后用winrar解压。
安装本扩展包以后就可以使用NetBeans进行J2ME应用的开发了,支持可视化开发,并可以与WTK2.2集成
而开发MIDlet应用程序有许多种开发工具可以选择 , 这些开发工具盒开发环境主要分为三大类:第一种是Sun公司的J2ME通用开发工具 , 例如J2ME无线开发工具包(WTK);第二种是集成开发环境 , 例如MyEclipse , ...
NetBeans™ IDE Field Guide: Developing Desktop, Web, Enterprise, and Mobile Applications, Second Edition 第一部分 The Only Complete Guide and Reference for NetBeans™ IDE 5.0 <br>The award-...
Java Socket聊天程序是我用了三天的时间写出来,用Netbeans建的工程,图形化界面是Netbeans拖拉出来的,自己能够做出这种功能挺满意的,也有一些bug,所以上传给大家一起分享,希望像我一样的Java学习者能够少走...
运用NetBeans开发的J2ME软件,专门支持symbol的MC1000移动计算机扫描,使用需要参照MC1000操作规范
how to sum 2 num in j2me using netbeans
pdf格式资料 基于NetBeans平台的移动信息设备的J2ME程序开发
语言程序设计资料:第13章_开发工具:NetBeans的使用.ppt
构建NetBeans 的JSP 开发环境-开发环境: JDK1.6 update3 NetBeans 5.5.1 SQL Server 2000 SP4 数据驱动JDBC 环境配置: 将3 个JAR 包(msbase.jar\mssqlserver.jar\msutil.jar)装载到NetBeans 所捆绑的TomCat 运行...