站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2ME 专题关于手机图象的一个问题.

关于手机图象的一个问题.

摘要: 关于手机图象的一个问题.


首先申明,以下这段代码是以sunyanbiao_12回复贴子中贴出的代码为基础,我冒昧的改了些,想实现按手机功能右键画一个正方形在手机底部,但尤其是初学,改后的代码虽然不报错,但也实现不了功能,特此各位解答.非常感谢!
附原码:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class hello extends MIDlet implements CommandListener{

private DrawCanvasdrawCav= new DrawCanvas();
private Graphics gra;
private Display myDisplay;
private Command DrawCommand = new Command("执行", Command.SCREEN, 1);
private Command ExitCommand = new Command("退出", Command.EXIT, 1);

public hello() {
drawCav.setDrawSt("初试手机界面程序!");
myDisplay.getDisplay(this).setCurrent(drawCav);
drawCav.setCommandListener(this);
drawCav.addCommand(ExitCommand);
drawCav.addCommand(DrawCommand);
// TODO Auto-generated constructor stub
}

protected void startApp() throws MIDletStateChangeException {
// TODO Auto-generated method stub

}

protected void pauseApp() {
// TODO Auto-generated method stub

}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
myDisplay.setCurrent((Displayable)null);
destroyApp(true);
notifyDestroyed();
// TODO Auto-generated method stub
}

public void commandAction(Command cmd, Displayable disp)
{
//drawCav.addCommand(getCurrentCommand());
if (cmd == DrawCommand)
{
gra.setColor(0x00000000);
gra.drawRect((disp.getWidth()-100),(disp.getHeight()-100),100,100);
}
if (cmd == ExitCommand)
drawCav.setDrawSt("Press down Leave.");
drawCav.repaint();
}

}



=========================================================




import javax.microedition.lcdui.*;

/**
* 字符串显示用的Canvas类别
*
* @author Hideki Yonekawa
* @version 1.0
*/
class DrawCanvas extends Canvas {
/** 描绘字符串内容的变量 */
private StringdrawSt;

/** 描绘的方法 */
protected void paint(Graphics g) {
// 背景涂白
g.setColor(0x00396DA5);
g.fillRect(0, 0, getWidth(), getHeight());

// 颜色指定为黑色
g.setColor(0x00FC0505);
g.drawRect(0,0,100,100);

// 描绘文字
g.setColor(0x00000000);
g.drawString(drawSt, getWidth()/2, getHeight()/2,Graphics.TOP|Graphics.LEFT);
}
protected void keyPressed(int keyCode) {
drawSt = String.valueOf(keyCode);
repaint();
}

/** 将字符串描绘到画面上的方法 */
void setDrawSt(String drawSt) {
this.drawSt = drawSt;
}
}


你想用DrawCanvas来处理按键事件,却没让它实现CommandListener接口


我虽然知道需要加一个Listener,但却不知道如何加,希望k7sem(∞≤≥∞Mobile developer community) 明示,非常感谢.


既然是用低级界面实现的,那直接用 keyPressed() 这个方法就OK了

等下,我给你从写一下。


非常感谢!学习学习!!!


import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

public class Main extends MIDlet
{
public Main()
{

Display.getDisplay(this).setCurrent(new Mycanvas());

}
public void startApp(){}
public void pauseApp(){}
public void destroyApp(boolean un){}
}

class Mycanvas extends Canvas
{
String left = "这是左软键";
String right = "这是右软键";
String s = "请按键!";
public Mycanvas(){}
public void paint(Graphics g)
{
g.setColor(0);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(0xffffff);
g.drawString(s,getWidth() >> 1 ,getHeight() >> 1,0);
}
protected void keyPressed(int keycode)
{
if(keycode == -6)
{
s = left;
}
if(keycode == -7)
{
s = right;
}
repaint();
}
}


忘了画个矩形了,呵呵,你就根据这个结构往里面丰富吧


我再多句嘴可以吗?
刚才您说到低级界面,那么什么是低给界面什么又是高级界面呢?
还有,如果可以的话,我想再麻烦您,如果是高级界面,又该如何写呢?
非常非常感谢!


安装到手机里的J2ME程序叫做MIDP程序。它是在CLDC基础上的一种支持标准。根据所支持的API版本的不同分1.0和2.0,MIDP程序又分为高级界面的和低级界面的。比如用Alert, Form, List, TextBox 等一些screen的子类开发的用户界面都属于高级的界面,优点是通用性好,对于各种型号的手机都不存在界面的移植性的大问题,缺点在与不灵活,,无法实现低级的画图功能。 低级界面的是由 Canvas类来实现的。 缺点在于移植性差,不同的手机屏幕,都需要做仔细的布局才能合适。优点是界面创建灵活。一般游戏都用低级界面来做。

所以你想画图的话,就用Canvas来实现吧。。 Canvas 和 Screen 都属于Displayable的子类


明白一些了,非常感谢!


↑返回目录
前一篇: 模拟手机出现后,不显现文字,自动退出,求达人解!!!
后一篇: moto e398中游戏安装后无图标显示?