次に、ソフトキーの処理を行ってみます。
高レベルAPIでは、低レベルAPIの場合と異なり、ソフトキーの処理もほかのキーと同様、processEventで行います。ここでは、ソフトキー「1」が押された時にアプリを終了させるようにします。
コンストラクタを追加してキーのラベルを設定しましょう。
40: public TestCanvas() {
41: setSoftLabel(0, "終了");
42: }
キーが押された時、離れた時にこだわらない場合は、KEY_PRESSED_EVENTではなく、KEY_RELEASED_EVENTで処理を行うようにします。
KEY_PRESSED_EVENTの場合に処理を行うと、処理終了後にKEY_RELEASED_EVENTを受け取ることになるため、ダイアログ処理などで不都合が起こる可能性があるためです。
60: case Display.KEY_RELEASED_EVENT :
61: dx = 0;
62: switch (param) {
63: case Display.KEY_SOFT1 :
64: IApplication.getCurrentApp().terminate();
65: break;
66: }
67: break;
実行すると次画面のようになります。ソフトキー「1」を押すと、アプリ終了します。
最後に、日本語文字入力を受け取れるようにしてみましょう。
ここで解説するのはDoJa3.0から追加された機能であり、それまでは低レベルAPIで漢字の入力はできず、一時的に高レベルAPIに切り替える必要がありました。
DoJa3.0以降で日本語文字の入力を受け取るには、imeOnメソッドを使います。
ここで挙げるコードでは、ソフトキー2が押されたら文字列を入力し、入力文字列を画面表示するものです。まず、画面に表示する文字列を覚えておくための変数messageを用意します。
28:class TestCanvas extends Canvas {
29: /** 口の開く角度 */
30: int mouth = 45;
31: /** 口の動く速さ */
32: int dm = -8;
33: /** 口の向き */
34: int arc = 0;
35: /** 描画横座標 */
36: int x = 50;
37: /** 横移動速度 */
38: int dx = 0;
39: /** 表示メッセージ */
40: String message = "";
41:
paintメソッドで、このメッセージを描画するようにdrawStringメソッドを追加します。
50: public void paint(Graphics g) {
51: g.lock();
52: g.clearRect(0, 0, getWidth(), getHeight());
53: Font f = Font.getFont(Font.TYPE_DEFAULT);
54: int ofset = f.getAscent();
55: g.drawString("動きます", 10, 10 + ofset);
56: g.drawString(message, 15, 200 + ofset);
57: g.setColor(Graphics.getColorOfName(Graphics.BLUE));
58: g.fillArc(x, 110, 30, 30, mouth + arc, 360 - mouth * 2);
59: g.unlock(true);
60: }
コンストラクタでソフトキー2のラベルを設定します。
42: public TestCanvas() {
43: setSoftLabel(0, "終了");
44: setSoftLabel(1, "入力");
45: }
ソフトキー2が離された時きの処理を記述し、imeOnメソッドを呼び出してから入力を始めるようにします。
Copyright © ITmedia, Inc. All Rights Reserved.