NetBeans IDE 4.0 的 J2ME MIDP 货币转换器教程
将通过在本教程中生成货币转换器应用程序,展示如何执行以下操作:
- 启动 J2ME MIDP 项目
- 使用 IDE 开发一个可用的 J2ME MIDP 应用程序或 MIDlet
- 创建项目配置,以便在两个不同的设备仿真器上测试应用程序的性能
货币转换器应用程序可以将一种货币金额转换为另外两种货币金额。您可以选择显示三种不同的货币:欧元、日元或美元。还可以输入一种货币的金额,将其转换为其他选定货币的金额。
此样例应用程序共有三个 Java 源代码文件:
-
ConverterMIDlet.java。MIDlet 类的代码。
-
Converter.java。MIDP 窗体,用于定义应用程序在移动设备上显示时的主屏幕。
-
Currencies Selector.java。保存货币和汇率的 MIDP 列表。
本教程的第一部分将向您介绍如何快速安装、运行和测试货币转换器应用程序,该应用程序作为 IDE 中包含的样例项目提供。在本教程的第二部分中,您将创建一个新项目,并添加代码以亲自创建和测试应用程序。
完成本教程大约需要一个小时。
要求
必须先安装 NetBeans IDE 4.0 和 NetBeans Mobility Pack 4.0,然后才能开始进行 J2ME MIDP 开发。有关下载和安装完整环境的说明,请参见 J2ME MIDP 开发下载页面。
安装和测试样例货币转换器项目
在第一节中,您将看到如何在两种不同的仿真器设备上快速安装和运行样例项目。
| 创建项目 |
- 选择“文件”>“新建项目”。在“类别”下选择“样例”>“移动”。在“项目”下面,选择“货币转换器”。单击“下一步”。
- “项目名称和位置”页面设置项目文件夹的名称和位置,并提供将项目设置为主项目的选项。单击“下一步”接受缺省值。
- “平台选择”页面设置项目的缺省执行环境,即仿真器平台。请注意,缺省仿真器平台为 J2ME Wireless Toolkit,缺省设备为 DefaultColorPhone(一种通用移动设备)。单击“完成”可完成该向导。
货币转换器显示在“项目”窗口中。
|
| 运行项目 |
- 选择“运行”>“运行主项目”。
货币转换器显示在 DefaultColorPhone 设备仿真器中。
- 现在,您就可以在设备仿真器中测试应用程序了。
|
| 测试应用程序 |
- 在 DefaultColorPhone 屏幕中,单击“启动”字样下面的按钮。
- 通过单击“选择”按钮上的向上箭头键和向下箭头键,选择要转换的货币。
您可以选择:美元、欧元或日元。
- 通过单击仿真器的数字键,输入要转换的货币金额。
应用程序进行转换计算并显示结果。
- 单击“退出”字样下面的按钮退出该应用程序。
- 单击右上角的红色按钮,关闭仿真器。
|
| 更改缺省仿真器设备 |
您可以通过创建不同的项目配置,或者更改缺省配置的设备,实现在不同的仿真器平台上测试 MIDlet。
- 从主菜单中,选择“文件”>“货币转换器属性”。在“属性”对话框中,选择“平台”节点。您可以更改缺省配置的设备。
- 单击“设备”下拉菜单,然后选择 "QwertyDevice"。单击“确定”。
- 选择“运行”>“运行主项目”再次运行应用程序,该应用程序将在 QwertyDevice 仿真器中运行。
|
在本教程的下一部分,您将重新创建一个新项目。这样,您将有机会了解更多有关应用程序后面的代码的信息,以及如何使用 IDE 对您自己的应用程序进行编码和测试的信息。
创建货币转换器应用程序
| 创建项目 |
- 选择“文件”>“新建项目”。在“类别”下选择“移动”。在“项目”下选择“移动应用程序”。单击“下一步”。
- 在“项目名称和位置”页面中,将项目命名为
NewCurrencyConverter,并接受项目主目录的缺省值。如果希望此项目成为主项目,请保留“设置为主项目”复选框的选中状态,然后单击“下一步”。
- 单击“完成”接受“平台”页面上的缺省值。
NewCurrencyConverter 应用程序将显示在“项目”窗口中。
|
创建 converterMIDlet.java MIDlet
|
- 选择“文件”>“新建文件”。在“类别”下选择 "MIDP"。在“文件类型”下选择 "MIDlet"。单击“下一步”。
- 在“名称和位置”页面中,输入 MIDlet 名称
Currency Converter、MIDP 类名 ConverterMIDlet 和包名 myconverter。
|
对 MIDlet 进行编码
可以使用以下两种方法之一为 MIDlet 编写代码:在源编辑器中直接输入代码,或者使用 IDE 添加方法、字段、构造函数、初始化函数、类和接口。通常的做法是:使用 IDE 将新字段和方法添加到类中,或者修改现有字段和方法,然后直接在源编辑器中对代码进行微调。
以下过程说明如何利用工具和源编辑器来输入或更改代码。然而,为了节省时间和精力,还可以从所安装的示例中复制转换器代码。
对 ConverterMIDlet.java MIDlet 进行编码 |
- 在源编辑器中,将以下导入语句添加到
ConverterMIDlet.java 中:
import java.io.*; import javax.microedition.rms.*;
- 在“项目”标签中,展开 ConverterMIDlet 节点,右键单击 ConverterMIDlet 类,然后选择“添加”>“字段”。
下一步将使用“添加新字段”对话框将字段 storedDataStr 添加到 MIDlet 中。storedDataStr 字符串包含 RMS 已存储记录的名称。
- 完成“添加新字段”对话框:
- 在“名称”框中输入新字段的名称
storedDataStr,然后从“类型”组合框中选择 其类型 "String"。
- 在“修饰符”框中,从
“访问”组合框选择字段的访问类型 "private"。
- 选中字段的其他修饰符,此处为 "static"。
- 将
storedDataStr 的初始值设置为 "ConverterData"。
- 单击“确定”关闭该对话框。
这样就将该字段添加到了“源编辑器”窗口的代码中。
-
使用源编辑器将以下字段添加到 ConverterMIDlet.java 类中。 您可以使用“添加字段”对话框,也可以从本页面或从已安装的货币转换器应用程序中复制文本并将其粘贴到源编辑器中。但是,要注意不能更改包的名称 myconverter。
public class ConverterMIDlet extends javax.microedition.midlet.MIDlet { private static String storedDataStr = "ConverterData";
public String[] currencies = new String[] { "US $", "Yen \u00a5", "Euro \u20ac" }; public boolean[] selected = new boolean[] { true, true, true, true }; public long[][] rates = {{ 1000000, 117580000, 911079 }, { 8504, 1000000, 7749 },
{ 1097600, 129056000, 1000000 }}; private RecordStore storedData;
- 将以下代码添加到方法
startApp() 中。应用程序启动时将调用此方法。它将从持久性存储中装入所有数据(货币、选定货币和汇率),并在最初显示“转换器”窗体。 该方法应类似于以下形式:
public void startApp() { try {
storedData = RecordStore.openRecordStore(storedDataStr, true);
if (storedData.getNumRecords() > 0) {
DataInputStream in = new DataInputStream(new ByteArrayInputStream(storedData.getRecord(1))); try { int size = in.readInt(); currencies = new String[size]; selected = new boolean[size]; rates = new long[size][]; for (int i=0; i<size; i++) { currencies[i] = in.readUTF(); selected[i] = in.readBoolean(); rates[i] = new long[size]; for (int j=0; j<size; j++) { rates[i][j] = in.readLong();
} }
in.close(); } catch (IOException ioe) { } } } catch (RecordStoreException e) { } notifySettingsChanged(); }
- 应用程序完成或被销毁时,将调用
destroyapp() 方法。添加以下代码来完成 destroyApp() 方法:
public void destroyApp(boolean unconditional) { try { ByteArrayOutputStream bytes = new ByteArrayOutputStream(); DataOutputStream out = new DataOutputStream(bytes); try { out.writeInt(currencies.length); for (int i=0; i<currencies.length; i++) { out.writeUTF(currencies[i]); out.writeBoolean(selected[i]); for (int j=0; j<currencies.length; j++) { out.writeLong(rates[i][j]); } } out.close(); if (storedData.getNumRecords() > 0) storedData.setRecord(1, bytes.toByteArray(), 0, bytes.size()); else storedData.addRecord(bytes.toByteArray(), 0, bytes.size()); } catch (IOException ioe) { ioe.printStackTrace(); } } catch (RecordStoreException e) { e.printStackTrace(); } notifyDestroyed(); }
- 添加以下三个新方法:
showSettings() 此方法创建并显示 CurrenciesSelector 列表。
public void showSettings() {
Display.getDisplay(this).setCurrent(new CurrenciesSelector(this));
}
notifySettingsChanged() 设置更改后,此方法将显示新的“转换器”窗体。
public void notifySettingsChanged() { Display.getDisplay(this).setCurrent(new Converter(this)); }
longconvert() 此方法执行货币转换。输入值 frval 将乘以存储在汇率表中的汇率,再除以 1,000,000。fridx 和 toidx 的值是源货币和目标货币的指数。
public long convert(long frval, int fridx, int toidx) { return (frval * rates[fridx][toidx]) / 1000000;
8. 通过选择“文件”>“保存”来保存 ConverterMIDlet。
|
创建 MIDP 窗体
完成了 MIDlet 的编码后,现在将创建应用程序的图形界面。窗体是一个 Java 类,它可以包含以下项的任意组合:图像、只读和可编辑的文本字段、可编辑的日期字段、标尺、选项组和定制项。在此处创建的窗体将为每种选定货币指定一个文本框,同时指定 ItemStateListener() 方法来监视和反映键入的值并执行转换。
对 Converter.java MIDP 窗体进行编码
|
- 在“项目”窗口中,右键单击 myconverter 包。选择“文件”>“新建文件/文件夹”。
此时将打开“新建文件”向导。
- 在“类别”下依次展开 "MIDP" 和“MIDP 窗体”。在“文件类型”下选择“MIDP 窗体”。单击“下一步”。
- 在“名称和位置”页面中,输入
Converter 作为类名。单击“完成”。 这样就创建了一个 MIDP 窗体并将其添加到了 myconverter 包中。
- 在源编辑器中,将以下字段添加到
public class Converter 声明下的代码中:
private ConverterMIDlet midlet; private int[] translate;
- 添加以下代码来完成构造函数,以使其如以下样例所示:
public Converter(ConverterMIDlet midlet) { super("Currency Converter");
this.midlet = midlet; this.translate = new int[midlet.currencies.length]; int current = 0; for (int i=0; i<translate.length; i++) { if (midlet.selected[i]) { translate[current++] = i; append(new TextField(midlet.currencies[i], "", 12, TextField.NUMERIC)); } } try { // Set up this form to listen to command events setCommandListener(this); // Set up this form to listen to changes in the internal state of its interactive items setItemStateListener(this); // Add the Currencies command addCommand(new Command("Currencies", Command.OK, 1)); // Add the Exit command addCommand(new Command("Exit", Command.EXIT, 1));
} catch(Exception e) { e.printStackTrace(); }
}
- 添加以下代码来完成方法
commandAction(),以使其如以下样例所示:
public void commandAction(Command command, Displayable displayable) { if (command.getCommandType() == Command.EXIT) { midlet.destroyApp(true); } else if (command.getCommandType() == Command.OK) { midlet.showSettings(); }
}
- 添加以下代码来完成
itemStateChanged() 方法,以使其如以下样例所示:
public void itemStateChanged(Item item) { try { long value = Long.parseLong(((TextField)item).getString()); int from = 0; while (get(from) != item) from++; from = translate[from]; for (int i=0; i<size(); i++) { int to = translate[i]; if (from != to) { ((TextField)get(i)).setString(String.valueOf(midlet.convert(value, from, to))); } } } catch (NumberFormatException nfe) { for (int i=0; i<size(); i++) { ((TextField)get(i)).setString(""); } } }
这样就完成了 Converter.java 窗体文件。
|
创建 MIDP 列表
货币转换器应用程序的最后一部分是 CurrenciesSelector.java 列表文件,该文件定义可
选择用来显示的货币。
对 CurrenciesSelector.java MIDP 列表进行编码
|
- 在“项目”窗口中,右键单击 myconverter 包。选择“文件”>“新建文件/文件夹”。
此时将打开“新建文件”向导。
- 在“类别”下依次展开 "MIDP" 和“MIDP 窗体”。在“文件类型”下选择“MIDP 列表”。单击“下一步”。
- 在“名称和位置”页面中,输入
CurrenciesSelector 作为类名。单击“完成”。 这样就创建了一个 MIDP 列表文件并将其添加到了 myconverter 包中。
- 在行
public class CurrenciesSelector extends List implements CommandListener {, 的后面声明一个字段:
private ConverterMIDlet midlet;
- 添加以下代码来完成构造函数,以使其如以下样例所示:
public CurrenciesSelector(ConverterMIDlet midlet) { super("Select Currencies", List.MULTIPLE, midlet.currencies, null); this.midlet = midlet; setSelectedFlags(midlet.selected); try { // Set up this list to listen to command events setCommandListener(this); // Add the Save command addCommand(new Command("Save", Command.OK, 1)); } catch(Exception e) { e.printStackTrace(); } }
- 添加以下代码来完成方法
commandAction(),以使其如以下样例所示:
public void commandAction(Command command, Displayable displayable) { if (command.getCommandType() == Command.OK) { getSelectedFlags(midlet.selected); midlet.notifySettingsChanged(); } }
这样即可完成 CurrenciesSelector.java 列表文件。
|
测试应用程序
现在您已经创建了应用程序,可以使用不同的仿真器设备对其进行测试,就像使用初次安装的样例货币转换器项目一样。但是,这一次并不切换缺省配置中的仿真器设备,而是创建 QwertyDevice 设备仿真器的第二个项目配置。
创建新的项目配置
|
- 选择“文件”>“NewCurrencyConverter 属性”。
- 单击“管理配置”按钮。
此时将打开项目配置管理器。
- 单击“添加”按钮。
此时将显示“添加配置”按钮。
- 将新配置命名为 QwertyDevice。单击“确定”。
- 单击“关闭”可关闭项目配置管理器。
现在,您已经拥有了第二个配置 QwertyDevice,该配置与 DefaultConfiguration 具有相同的属性。 |
| 更改设备属性 |
- 当仍然处于“项目属性”中时,从该窗口左侧窗格的树菜单中选择“平台”。
- 如果 QwertyDevice 没有显示为活动项目配置,则从“项目配置”下拉菜单中选择它。
- 取消选中“使用 DefaultConfiguration 中的值”复选框,以便您可以为此配置选择新值。
- 从“设备”下拉菜单中选择 "QwertyDevice"。单击“确定”。
|
| 在两种配置上运行应用程序 |
- 确保工具栏上的“配置”下拉菜单将 DefaultConfiguration 作为活动项目配置列出。
- 选择“运行”>“运行主项目”。
货币转换器在 DefaultColorPhone 设备仿真器屏幕中打开。
- 从工具栏的“配置”下拉菜单中选择 "QwertyDevice"。
- 选择“运行”>“运行主项目”。
货币转换器在 QwertyDevice 设备仿真器屏幕中打开。
- 现在,您可以同时在不同的设备上测试和比较应用程序的性能。
|