先做一个比较简单的手机计算器好了。。
按照前面说的方法建立一个工程后,将代码补充到生成的框架里面就可以了。
TestMidlet.java代码:
package testmidlet;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class TestMidlet extends MIDlet {
static TestMidlet instance;
TestScreen displayable = new TestScreen();
public TestMidlet() {
instance = this;
}
public void startApp() {
Display.getDisplay(this).setCurrent(displayable);
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
public static void quitApp() {
instance.destroyApp(true);
instance.notifyDestroyed();
instance = null;
}
}
TestScreen.java代码:
package testmidlet;
import javax.microedition.lcdui.*;
public class TestScreen extends Form implements CommandListener {
private TextField intA = new TextField("请输入数字a","0",10,TextField.DECIMAL);
private TextField intB = new TextField("请输入数字b","0",10,TextField.DECIMAL);
private TextField result = new TextField("运算结果:","0",10,TextField.ANY);
private ChoiceGroup opt = new ChoiceGroup("运算:",ChoiceGroup.EXCLUSIVE);
String[] op = {"+","-","*","/"};
public TestScreen() {
super("计算器");
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
private void jbInit() throws Exception {
opt.append(op[0],null);
opt.append(op[1],null);
opt.append(op[2],null);
opt.append(op[3],null);
append(intA);
append(intB);
append(opt);
append(result);
setCommandListener(this);
addCommand(new Command("退出", Command.EXIT, 1));
addCommand(new Command("计算",Command.OK,2));
}
private void performAddAction(){
int a,b,r = 0;
a = Integer.parseInt(intA.getString());
b = Integer.parseInt(intB.getString());
if(op[opt.getSelectedIndex()].equals("+")){
r = a + b;
}
if(op[opt.getSelectedIndex()].equals("-")){
r = a - b;
}
if(op[opt.getSelectedIndex()].equals("*")){
r = a * b;
}
if(op[opt.getSelectedIndex()].equals("/")){
if(b == 0){
result.setString("除数不能为0!");
return;
}
r = a / b;
}
result.setString(Integer.toString(r));
}
public void commandAction(Command command, Displayable displayable) {
if (command.getCommandType() == Command.EXIT) {
TestMidlet.quitApp();
}
if(command.getCommandType() == Command.OK){
performAddAction();
}
}
}
这个程序比较简单,类TestScreen继承了Form类,所以可以添加各种Item到屏幕里,例如文本框(TextField)、单选按钮(ChoiceGroup)等等。TestScreen实现了CommandListener 接口,所以可以响应命令按键事件,当然也可以单独建一个类继承CommandListener,不过似乎没有必要,在J2ME中,因为资源有限,因此要节省资源,多一个Class对生成的jar大小和运行效率都会有影响,因此虽然面向对象和各种设计模式对设计十分有利但是相对来说也牺牲了程序的运行速度。
private TextField intA = new TextField("请输入数字a","0",10,TextField.DECIMAL);
private TextField intB = new TextField("请输入数字b","0",10,TextField.DECIMAL);
private TextField result = new TextField("运算结果:","0",10,TextField.ANY);
private ChoiceGroup opt = new ChoiceGroup("运算:",ChoiceGroup.EXCLUSIVE);
String[] op = {"+","-","*","/"};
以上代码创建了三个文本输入框和一个单选按钮组,还有一个字符串的数组来保存计算的各种操作。
opt.append(op[0],null);
opt.append(op[1],null);
opt.append(op[2],null);
opt.append(op[3],null);
append(intA);
append(intB);
append(opt);
append(result);
setCommandListener(this);
addCommand(new Command("退出", Command.EXIT, 1));
addCommand(new Command("计算",Command.OK,2));
以上代码将三个文本框和单选按钮组加入到屏幕(也就是Form)中,并且设置响应命令按键的类是自己(this),然后加入了两个命令按钮,分别放在EXIT和OK的位置。一般来说,EXIT是左边的按钮,OK是右边的按钮。
private void performAddAction(){
int a,b,r = 0;
a = Integer.parseInt(intA.getString());
b = Integer.parseInt(intB.getString());
if(op[opt.getSelectedIndex()].equals("+")){
r = a + b;
}
if(op[opt.getSelectedIndex()].equals("-")){
r = a - b;
}
if(op[opt.getSelectedIndex()].equals("*")){
r = a * b;
}
if(op[opt.getSelectedIndex()].equals("/")){
if(b == 0){
result.setString("除数不能为0!");
return;
}
r = a / b;
}
result.setString(Integer.toString(r));
}
上面的函数是具体的计算过程。。。
if(command.getCommandType() == Command.OK){如果按的是OK的按钮,则执行计算。
OK,这个简单的小程序就完成啦!当然这只是一个最基本的程序,但J2ME的编程方式就是这个样子的。以下是程序运行界面: