NetBeans IDE 4.0 チュートリアル: J2ME MIDP 通貨変換アプリケーション
このチュートリアルで構築する、通貨変換アプリケーションでは、次のことを行う方法を学ぶことができます。
- J2ME MIDP プロジェクトの開始
- IDE を使用した、実用的な J2ME MIDP、すなわち MIDlet のコーディング
- 異なる 2 つのデバイスエミュレータでアプリケーションをテストするためのプロジェクトの構成の作成
通貨変換アプリケーションは、ある通貨の金額を別の 2 つの通貨の金額に換算します。異なる 3 つの通貨、ユーロ、円およびドルを表示するように選択できます。また、ある通貨の値を入力して、選択されている別の通貨に換算することもできます。
このサンプルアプリケーションには、次の 3 つの Java ソースコードファイルがあります。
-
ConverterMIDlet.java。MIDlet クラスのコードです。
-
Converter.java。モバイルデバイスに表示するるアプリケーションのメイン画面を定義する MIDP フォームです。
-
Currencies Selector.java。通貨と換算率からなる MIDP リストです。
このチュートリアルの前半では、IDE 付属のサンプルプロジェクトとして提供されている通貨変換アプリケーションを素早くインストール、実行、テストする方法を説明しています。チュートリアルの後半では、新しいプロジェクトを作成し、アプリケーションを作成、テストするコードを追加します。
このチュートリアルに要する時間は約 1 時間です。
要件
J2ME MIDP 開発を開始するにあたっては、NetBeans IDE 4.0 および NetBeans Mobility Pack 4.0 を事前にインストールしておく必要があります。完全な環境のダウンロードおよびインストール方法については、「NetBeans IDE 4.0: J2ME MIDP 開発」の「ダウンロード」を参照してください。
通貨変換サンプルプロジェクトのインストールとテスト
ここでは、サンプルプロジェクトを素早くインストールし、異なる 2 つのエミュレータデバイスでそのプロジェクトを実行する方法を示します。
| プロジェクトの作成 |
- 「ファイル」>「新規プロジェクト」を選択します。「カテゴリ」で「サンプル」>「モバイル」を選択します。「プロジェクト」で「通貨換算」を選択し、「次へ」をクリックします。
- プロジェクトフォルダの名前と場所が設定された「プロジェクトの名前と場所」ページが表示され、サンプルプロジェクトを主プロジェクトとして設定できます。「次へ」をクリックして、デフォルト値を使用します。
- プロジェクトのデフォルトの実行環境 (エミュレータプラットフォーム) が設定された「プラットフォームの選択」ページが表示されます。デフォルトのエミュレータプラットフォームが J2ME Wireless Toolkit、デフォルトデバイスが DefaultColorPhone (汎用モバイルデバイス) であることに注意します。「完了」をクリックしてウィザードを終了します。
「プロジェクト」ウィンドウに Currency Converter が表示されます。
|
| プロジェクトの実行 |
- 「実行」>「主プロジェクトを実行」を選択します。
DefaultColorPhone デバイスエミュレータに Currency Converter が表示されます。
- これで、デバイスエミュレータでアプリケーションをテストする準備ができました。
|
| アプリケーションのテスト |
- 「DefaultColorPhone」画面で「選択」という単語の下にあるボタンをクリックします。
- 「Select」ボタンにある上向きおよび下向きの矢印キーをクリックして、換算する通貨を選択します。選択できる通貨は「US」、「Euro」、「Yen」のいずれかです。
- エミュレータの数字キーを使用して、換算する金額を入力します。アプリケーションが通貨を換算し、その結果を表示します。
- 「Exit」という単語の下にあるボタンをクリックして、アプリケーションを終了します。
- 右上にある赤いボタンをクリックして、エミュレータを閉じます。
|
| デフォルトのエミュレータデバイスの変更 |
別のプロジェクト構成を作成して、異なるエミュレータプラットフォームで MIDlet をテストすることができます。また、デフォルト構成のデバイスを単に変更することもできます。
- メインメニューから「ファイル」>「"Currency Converter" プロパティ」を選択します。プロパティダイアログで「プラットフォーム」ノードを選択します。デフォルト構成のデバイスを変更できます。
- 「デバイス」ドロップダウンメニューをクリックして、「QwertyDevice」を選択し、「了解」をクリックします。
- 再びアプリケーションを実行します。今度はアプリケーションは、QwertyDevice エミュレータで実行されます。
|
次の項では、最初から新しいプロジェクトを作り直します。これで、このサンプルアプリケーションのコードをより深く学ぶことができます。また、IDE を使用してアプリケーションのコードを作成し、テストする方法を学ぶこともできます。
通貨変換アプリケーションの作成
| プロジェクトの作成 |
- 「ファイル」>「新規プロジェクト」を選択します。「カテゴリ」で「モバイル」を選択します。「プロジェクト」で「モバイルアプリケーション」を選択します。「次へ」をクリックします。
- 「プロジェクトの名前と場所」ページで、プロジェクト名として
NewCurrencyConverter を入力し、「プロジェクトのホーム」はデフォルト値を使用します。プロジェクトを主プロジェクトにするなら、「主プロジェクトとして設定」チェックボックスは選択されたままにしておきます。
- 「プラットフォームの選択」では、「完了」をクリックして、すべてのデフォルト値をそのまま使用します。「プロジェクト」ウィンドウに NewCurrencyConverter アプリケーションが表示されます。
|
converterMIDlet.java MIDlet の作成
|
- 「ファイル」>「新規ファイル」を選択します。「カテゴリ」で「MIDP」を選択します。「ファイルの種類」で「MIDlet」を選択します。「次へ」をクリックします。
- 「名前と場所」ページで MIDlet 名に
Currency Converter、MIDP クラス名に ConverterMIDlet、パッケージに「myconverter」を入力します。
|
MIDlet のコード作成
MIDlet のコードを記述する方法は、ソースエディタでコードを直接入力する方法、または IDE を使用してメソッドやフィールド、コンストラクタ、初期化子、クラス、インタフェースを追加する方法の 2 通りあります。一般に、クラスへの新規フィールドやメソッドの追加、または既存のフィールドやメソッドの変更には IDE を使用し、あとでソースエディタで直接細かいコードの修正をします。次の手順では、ツールとソースエディタを使用して、コードを入力または変更する方法を示します。ただし、時間と手間を省くために、 インストールしたサンプルからコンバータのコードをコピーすることもできます。
ConverterMIDlet.java MIDlet のコーディング |
- ソースエディタで、
ConverterMIDlet.java に次のインポート文を追加します。
import java.io.*; import javax.microedition.rms.*;
- 「プロジェクト」タブで「ConverterMIDlet」ノードを展開し、「ConverterMIDlet」クラスを右クリックして、「追加」>「フィールド」を選択します。
次の手順では、「新規フィールドを追加」ダイアログボックスを使用して、MIDlet に storedDataStr というフィールドを追加します。storedDataStr 文字列には、RMS によって保存されたレコードの名前が含まれます。
- 次の要領で、「新規フィールドを追加」ダイアログを完成します。
- 「名前」ボックスに新規フィールド名
storedDataStr を入力し、「型」コンボボックスから「String」を選択する。
- 「アクセス権」コンボボックスから、フィールドへのアクセスの種類として「private」を選択する。
- フィールドのその他の修飾子を選択する (この場合は static)。
storedDataStr の初期値を「"ConverterData"」に設定する。
- 「了解」をクリックしてダイアログを閉じます。
「ソースエディタ」ウィンドウに表示されているコードにフィールドが追加されます。
-
ソースエディタを使用して、ConverterMIDlet.java クラスに次のフィールドを追加します。 「フィールドを追加」ダイアログボックスを使用して、このページまたはインストールした Currency Converter アプリケーションからテキストをコピーし、ソースエディタにペーストできます。ただし、パッケージ名の 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() に次のコードを追加します。このメソッドは、アプリケーションを起動したときに呼び出され、持続的記憶領域からすべてのデータ (通貨、選択された通貨、および換算率) を読み込み、Converter フォームを表示します。 メソッドは以下のようになります。
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(); }
- 次の 3 つの新しいメソッドを追加します。
showSettings()
このメソッドは、CurrenciesSelector リストを作成、表示します。
public void showSettings() {
Display.getDisplay(this).setCurrent(new CurrenciesSelector(this));
}
notifySettingsChanged() このメソッドは、設定が変更されたときにに新しい Converter フォームを表示します。
public void notifySettingsChanged() { Display.getDisplay(this).setCurrent(new Converter(this)); }
longconvert() このメソッドは、通貨の換算を行います。入力値、frval に、換算率表にある換算率を掛け、1,000,000 で割ります。fridx および <:cs "Filename | Command" 1>toidx<:/cs> 値は、換算元と換算先の通貨のインデックスです。
public long convert(long frval, int fridx, int toidx) { return (frval * rates[fridx][toidx]) / 1000000; }
8. 「ファイル」>「保存」を選択して、ConverterMIDlet を保存します。
|
MIDP フォームの作成
MIDlet のコードを完成したら、アプリケーションのグラフィカルインタフェースを作成します。フォームとは、画像、読み取り専用および編集可能なテキストフィールド、編集可能な日付フィールド、ゲージ、選択グループ、およびカスタム項目などを任意に混在することができる Java クラスです。ここで作成するフォームでは、選択された通貨ごとにテキストボックスを定義して、入力された値を監視、反映して、換算を行う ItemStateListener() メソッドを定義します。
Converter.java MIDlet フォームのコード作成
|
- 「プロジェクト」ウィンドウで myconverter パッケージを右クリックします。次に「新規」>「ファイル / フォルダ」を選択すると、
「新規ファイル」ウィザードが開きます。
- 「カテゴリ」で「MIDP」を展開し、さらに「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 {
// このフォームがコマンドイベントを監視するように設定
setCommandListener(this);
// このフォームが対話式項目の内部状態の変化を監視するように設定
setItemStateListener(this);
// Currencies コマンドを追加
addCommand(new Command("Currencies", Command.OK, 1));
// Exit コマンドを追加
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 リスト」を選択し、「次へ」をクリックします。
- 「名前と場所」ページで、MIDP クラス名に
CurrenciesSelector を入力し、「完了」をクリックします。 MIDP リストが作成されて、myconverter パッケージに追加されます。
public class CurrenciesSelector extends List implements CommandListener {, 行の後にフィールドを 1 つ宣言します。
private ConverterMIDlet midlet;
- 次のコードを追加して、コンストラクタを完成します。コードは以下に示すようになります。
public CurrenciesSelector(ConverterMIDlet midlet) { super("Select Currencies", List.MULTIPLE, midlet.currencies, null); this.midlet = midlet; setSelectedFlags(midlet.selected); try {
// このリストがコマンドイベントを監視するように設定
setCommandListener(this);
// Save コマンドを追加
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 リストファイルが完成しました。
|
アプリケーションのテスト
アプリケーションを作成すると、最初にインストールした Currency Converter サンプルプロジェクトで行ったように、さまざまなエミュレータデバイスを使用して、アプリケーションをテストできます。ただし、ここでは、デフォルト構成のエミュレータデバイスを切り替える代わりに、QwertyDevice デバイスエミュレータ用の 2 つ目のプロジェクト構成を作成します。
新規プロジェクト構成の作成
|
- 「ファイル」>「"NewCurrencyConverter" プロパティ」を選択します。
- 「構成を管理」ボタンをクリックします。
プロジェクト構成マネージャが開きます。
- 「追加」ボタンをクリックします。
「プロジェクト構成を追加」ダイアログが表示されます。
- 新しい構成に QwertyDevice という名前を指定して、「了解」をクリックします。
- 「閉じる」をクリックして、プロジェクト構成マネージャを閉じます。
これで、DefaultConfiguration と同じプロパティを持つ 2 つ目の構成、QwertyDevice が作成されました。 |
| 「デバイス」プロパティの変更 |
- 「プロジェクトプロパティ」ウィンドウの左区画にあるツリーメニューから「プラットフォーム」を選択します。
- アクティブなプロジェクト構成として QwertyDevice が示されていない場合は、「プロジェクト構成」ドロップダウンメニューから選択します。
- この構成に新しい値を選択できるようにするには、「"DefaultConfiguration"の値を使用」チェックボックスの選択を解除します。
- 「デバイス」ドロップダウンメニューから「QwertyDevice」を選択します。「了解」をクリックします。
|
| 両方の構成でのアプリケーションの実行 |
- ツールバーにある「構成」ドロップダウンメニューに、アクティブなプロジェクト構成として DefaultConfiguration が含まれていることを確認します。
- 「実行」>「主プロジェクトを実行」を選択します。
「DefaultColorPhone」デバイスエミュレータ画面に Currency Converter が表示されます。
- ツールバーにある「構成」ドロップダウンメニューから「QwertyDevice」を選択します。
- 「実行」>「主プロジェクトを実行」を選択します。
「QwertyDevice Device」エミュレータ画面に Currency Converter が表示されます。
- これで、複数のデバイスで同時にアプリケーションをテストし、そのパフォーマンスを比較できます。
|