特集:Eclipseで始めるiアプリ――低レベルAPI編(8/10 ページ)

» 2004年10月27日 13時55分 公開
[きしだ なおき,ITmedia]

ソフトキーの処理

 次に、ソフトキーの処理を行ってみます。

 高レベル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」を押すと、アプリ終了します。

画面36■実行画面

日本語文字入力の受け付け

 最後に、日本語文字入力を受け取れるようにしてみましょう。

 ここで解説するのは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.

注目のテーマ