Java/J2ME/Key Event
Содержание
Canvas for processing game actions
<source lang="java">
/*--------------------------------------------------
- GameActions.java
- Canvas for processing game actions
- Example from the book: Core J2ME Technology
- Copyright John W. Muchow http://www.CoreJ2ME.ru
- You may use/modify for any non-commercial purpose
- -------------------------------------------------*/
import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class GameActions extends MIDlet {
private Display display; // The display private GameActionCanvas canvas; // Canvas public GameActions() { display = Display.getDisplay(this); canvas = new GameActionCanvas(this); } protected void startApp() { display.setCurrent( canvas ); } protected void pauseApp() { } protected void destroyApp( boolean unconditional ) { } public void exitMIDlet() { destroyApp(true); notifyDestroyed(); }
} /*--------------------------------------------------
- GameActionCanvas.java
- Game action event handling
- -------------------------------------------------*/
class GameActionCanvas extends Canvas implements CommandListener {
private Command cmExit; // Exit midlet private String keyText = null; // Key code text private GameActions midlet; /*-------------------------------------------------- * Constructor *-------------------------------------------------*/ public GameActionCanvas(GameActions midlet) { this.midlet = midlet; // Create exit command & listen for events cmExit = new Command("Exit", Command.EXIT, 1); addCommand(cmExit); setCommandListener(this); } /*-------------------------------------------------- * Paint the text representing the key code *-------------------------------------------------*/ protected void paint(Graphics g) { // Clear the background (to white) g.setColor(255, 255, 255); g.fillRect(0, 0, getWidth(), getHeight()); // Set color and draw text if (keyText != null) { // Draw with black pen g.setColor(0, 0, 0); // Center the text g.drawString(keyText, getWidth()/2, getHeight()/2, Graphics.TOP | Graphics.HCENTER); } } /*-------------------------------------------------- * Command event handling *-------------------------------------------------*/ public void commandAction(Command c, Displayable d) { if (c == cmExit) midlet.exitMIDlet(); } /*-------------------------------------------------- * Game action event handling * A game action will be converted into a key code * and handed off to this method *-------------------------------------------------*/ protected void keyPressed(int keyCode) { switch (getGameAction(keyCode)) { // Place logic of each action inside the case case FIRE: case UP: case DOWN: case LEFT: case RIGHT: case GAME_A: case GAME_B: case GAME_C: case GAME_D: default: // Print the text of the game action keyText = getKeyName(keyCode); } repaint(); }
}
</source>
Canvas for processing key code and commands
<source lang="java">
/*--------------------------------------------------
- KeyCodes.java
- Canvas for processing key code and commands
- Example from the book: Core J2ME Technology
- Copyright John W. Muchow http://www.CoreJ2ME.ru
- You may use/modify for any non-commercial purpose
- -------------------------------------------------*/
import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class KeyCodes extends MIDlet {
private Display display; // The display private KeyCodeCanvas canvas; // Canvas public KeyCodes() { display = Display.getDisplay(this); canvas = new KeyCodeCanvas(this); } protected void startApp() { display.setCurrent( canvas ); } protected void pauseApp() { } protected void destroyApp( boolean unconditional ) { } public void exitMIDlet() { destroyApp(true); notifyDestroyed(); }
} /*--------------------------------------------------
- Class KeyCodeCanvas
- Key codes and commands for event handling
- -------------------------------------------------*/
class KeyCodeCanvas extends Canvas implements CommandListener {
private Command cmExit; // Exit midlet private String keyText = null; // Key code text private KeyCodes midlet; /*-------------------------------------------------- * Constructor *-------------------------------------------------*/ public KeyCodeCanvas(KeyCodes midlet) { this.midlet = midlet; // Create exit command & listen for events cmExit = new Command("Exit", Command.EXIT, 1); addCommand(cmExit); setCommandListener(this); } /*-------------------------------------------------- * Paint the text representing the key code *-------------------------------------------------*/ protected void paint(Graphics g) { // Clear the background (to white) g.setColor(255, 255, 255); g.fillRect(0, 0, getWidth(), getHeight()); // Set color and draw text if (keyText != null) { // Draw with black pen g.setColor(0, 0, 0); // Close to the center g.drawString(keyText, getWidth()/2, getHeight()/2, Graphics.TOP | Graphics.HCENTER); } } /*-------------------------------------------------- * Command event handling *-------------------------------------------------*/ public void commandAction(Command c, Displayable d) { if (c == cmExit) midlet.exitMIDlet(); } /*-------------------------------------------------- * Key code event handling *-------------------------------------------------*/ protected void keyPressed(int keyCode) { keyText = getKeyName(keyCode); repaint(); }
}
</source>
Event Example 1
<source lang="java">
/* License
* * Copyright 1994-2004 Sun Microsystems, Inc. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistribution of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * * Redistribution in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Sun Microsystems, Inc. or the names of contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * This software is provided "AS IS," without a warranty of any kind. ALL * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE * AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. * * You acknowledge that this software is not designed, licensed or intended * for use in the design, construction, operation or maintenance of any * nuclear facility. */
import javax.microedition.lcdui.*; import javax.microedition.midlet.*; public class EventEx1 extends MIDlet implements CommandListener {
// display manager Display display = null; // a menu with items List menu = null; // main menu // textbox TextBox input = null; // command static final Command backCommand = new Command("Back", Command.BACK, 0); static final Command mainMenuCommand = new Command("Main", Command.SCREEN, 1); static final Command exitCommand = new Command("Exit", Command.STOP, 2); String currentMenu = null; // constructor. public EventEx1() { } /** * Start the MIDlet by creating a list of items and associating the * exit command with it. */ public void startApp() throws MIDletStateChangeException { display = Display.getDisplay(this); menu = new List("Menu Items", Choice.IMPLICIT); menu.append("Item1", null); menu.append("Item2", null); menu.append("Item3", null); menu.append("Item4", null); menu.addCommand(exitCommand); menu.setCommandListener(this); mainMenu(); } public void pauseApp() { display = null; menu = null; input = null; } public void destroyApp(boolean unconditional) { notifyDestroyed(); } // main menu void mainMenu() { display.setCurrent(menu); currentMenu = "Main"; } /** * a generic method that will be called when selected any of * the items on the list. */ public void prepare() { input = new TextBox("Enter some text: ", "", 5, TextField.ANY); input.addCommand(backCommand); input.setCommandListener(this); input.setString(""); display.setCurrent(input); } /** * Test item1. */ public void testItem1() { prepare(); currentMenu = "item1"; } /** * Test item2. */ public void testItem2() { prepare(); currentMenu = "item2"; } /** * Test item3. */ public void testItem3() { prepare(); currentMenu = "item3"; } /** * Test item4. */ public void testItem4() { prepare(); currentMenu = "item4"; }
/** * Handle events. */ public void commandAction(Command c, Displayable d) { String label = c.getLabel(); if (label.equals("Exit")) { destroyApp(true); } else if (label.equals("Back")) { if(currentMenu.equals("item1") || currentMenu.equals("item2") || currentMenu.equals("item3") || currentMenu.equals("item4")) { // go back to menu mainMenu(); } } else { List down = (List)display.getCurrent(); switch(down.getSelectedIndex()) { case 0: testItem1();break; case 1: testItem2();break; case 2: testItem3();break; case 3: testItem4();break; } } }
}
</source>
Event Example 2
<source lang="java">
import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class EventEx2 extends MIDlet {
Display display; public EventEx2() { display = Display.getDisplay(this); } public void destroyApp (boolean unconditional) { notifyDestroyed(); System.out.println("App destroyed "); } public void pauseApp () { display = null; System.out.println("App paused."); } public void startApp () { Form form = new Form("Change Date"); ItemStateListener listener = new ItemStateListener() { java.util.Calendar cal = java.util.Calendar.getInstance(java.util.TimeZone.getDefault()); public void itemStateChanged(Item item) { cal.setTime(((DateField)item).getDate()); System.out.println("\nDate has changed"); } }; form.setItemStateListener(listener); java.util.Date now = new java.util.Date(); DateField dateItem = new DateField("Today"s date:", DateField.DATE); dateItem.setDate(now); form.append(dateItem); display.setCurrent(form); }
}
</source>
Game Key Event
<source lang="java">
/* J2ME in a Nutshell By Kim Topley ISBN: 0-596-00253-X
- /
import javax.microedition.lcdui.Canvas; import javax.microedition.lcdui.rumand; import javax.microedition.lcdui.rumandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Graphics; import javax.microedition.midlet.MIDlet; public class EventsMIDlet extends MIDlet
implements CommandListener { // The MIDlet"s Display object private Display display; // Flag indicating first call of startApp protected boolean started; // Exit command private Command exitCommand; protected void startApp() { if (!started) { display = Display.getDisplay(this); Canvas canvas = new EventsCanvas(); exitCommand = new Command("Exit", Command.EXIT, 0); canvas.addCommand(exitCommand); canvas.setCommandListener(this); display.setCurrent(canvas); started = true; } } protected void pauseApp() { } protected void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d) { if (c == exitCommand) { // Exit. No need to call destroyApp // because it is empty. notifyDestroyed(); } }
} class EventsCanvas extends Canvas {
static int[] keyCodes = {KEY_NUM0, KEY_NUM1, KEY_NUM2, KEY_NUM3, KEY_NUM4, KEY_NUM5, KEY_NUM6, KEY_NUM7, KEY_NUM8, KEY_NUM9, KEY_POUND, KEY_STAR}; static String[] keyNames = {"KEY_NUM0", "KEY_NUM1", "KEY_NUM2", "KEY_NUM3", "KEY_NUM4", "KEY_NUM5", "KEY_NUM6", "KEY_NUM7", "KEY_NUM8", "KEY_NUM9", "KEY_POUND", "KEY_STAR"}; static int[] gameActions = { UP, DOWN, LEFT, RIGHT, FIRE, GAME_A, GAME_B, GAME_C, GAME_D}; static String[] gameNames = { "UP", "DOWN", "LEFT", "RIGHT", "FIRE", "GAME_A", "GAME_B", "GAME_C", "GAME_D" }; int lastKeyCode = 0; int lastX; int lastY; boolean pointer; protected void keyPressed(int keyCode) { lastKeyCode = keyCode; repaint(); } protected void keyRepeated(int keyCode) { lastKeyCode = keyCode; repaint(); } protected void keyReleased(int keyCode) { lastKeyCode = 0; repaint(); } protected void pointerPressed(int x, int y) { lastX = x; lastY = y; pointer = true; repaint(); } protected void pointerDragged(int x, int y) { lastX = x; lastY = y; pointer = true; repaint(); } protected void pointerReleased(int x, int y) { pointer = false; repaint(); } protected void paint(Graphics g) { g.setColor(0xffffff); g.fillRect(0, 0, getWidth(), getHeight()); g.setColor(0); if (lastKeyCode != 0) { String keyText = "keyCode " + lastKeyCode; String keyName = null; // See if it is a standard key for (int i = 0; i < keyCodes.length; i++) { if (lastKeyCode == keyCodes[i]) { keyName = keyNames[i]; break; } } if (keyName == null) { // See if it is a game action for (int i = 0; i < gameActions.length; i++) { if (lastKeyCode == getKeyCode(gameActions[i])) { keyName = gameNames[i]; break; } } } g.drawString(keyText, getWidth()/2, getHeight()/2, Graphics.BASELINE|Graphics.HCENTER); if (keyName != null) { g.drawString(keyName, getWidth()/2, getHeight()/2 + g.getFont().getHeight(), Graphics.BASELINE|Graphics.HCENTER); } } else if (pointer) { g.drawString("(" + lastX + ", " + lastY + ")", getWidth()/2, getHeight()/2, Graphics.BASELINE|Graphics.HCENTER); } }
}
</source>
Key Event Demo
<source lang="java">
/*
* @(#)Tiles.java 1.6 00/05/24 Copyright (c) 2000 Sun Microsystems, Inc. All * Rights Reserved. * * This software is the confidential and proprietary information of Sun * Microsystems, Inc. ("Confidential Information"). You shall not disclose such * Confidential Information and shall use it only in accordance with the terms * of the license agreement you entered into with Sun. * * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR * NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY * LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS * DERIVATIVES. */
import javax.microedition.lcdui.Canvas; import javax.microedition.lcdui.rumand; import javax.microedition.lcdui.rumandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Font; import javax.microedition.lcdui.Graphics; import javax.microedition.midlet.MIDlet; public class Tiles extends MIDlet {
Board b; public Tiles() { b = new Board(this); } public void startApp() { Display.getDisplay(this).setCurrent(b); } public void pauseApp() { } public void destroyApp(boolean unconditional) { }
} /*
* @(#)Board.java 1.14 00/05/23 Copyright (c) 2000 Sun Microsystems, Inc. All * Rights Reserved. * * This software is the confidential and proprietary information of Sun * Microsystems, Inc. ("Confidential Information"). You shall not disclose such * Confidential Information and shall use it only in accordance with the terms * of the license agreement you entered into with Sun. * * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR * NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY * LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS * DERIVATIVES. */
class Board extends Canvas implements CommandListener {
MIDlet midlet; Command exitCommand; Font font; // Character Position int xPos, yPos; // Chracter Height and Width in pixels int charW, charH; public Board(MIDlet midlet_) { int i; midlet = midlet_; Display dpy = Display.getDisplay(midlet); int letterWidth = 4; font = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_MEDIUM); charW = font.charWidth("M") + 7; charH = font.getHeight() + 1; xPos = (getWidth() - (letterWidth * charW) + 1) / 2; yPos = 1; exitCommand = new Command("Exit", Command.SCREEN, 2); addCommand(exitCommand); setCommandListener(this); repaint(); } public void commandAction(Command c, Displayable d) { if (c == exitCommand) { midlet.notifyDestroyed(); } } public void paint(Graphics g) { g.setColor(0); g.drawRect(4, 4, 4 * charW + 2, 4 * charH + 2); } public void keyPressed(int code) { int game = getGameAction(code); switch (game) { case Canvas.UP: System.out.println("Canvas.UP"); break; case Canvas.DOWN: System.out.println("Canvas.DOWN"); break; case Canvas.LEFT: System.out.println("Canvas.LEFT"); break; case Canvas.RIGHT: System.out.println("Canvas.RIGHT"); break; } switch (code) { case Canvas.KEY_NUM0: System.out.println("Key 0"); break; case Canvas.KEY_NUM1: System.out.println("Key 1"); break; case Canvas.KEY_NUM2: System.out.println("Key 2"); break; case Canvas.KEY_NUM3: System.out.println("Key 3"); break; case Canvas.KEY_NUM4: System.out.println("Key 4"); break; case Canvas.KEY_NUM5: System.out.println("Key 5"); break; case Canvas.KEY_NUM6: System.out.println("Key 6"); break; case Canvas.KEY_NUM7: System.out.println("Key 7"); break; case Canvas.KEY_NUM8: System.out.println("Key 8"); break; case Canvas.KEY_NUM9: System.out.println("Key 9"); break; case Canvas.KEY_STAR: System.out.println("Star Key"); break; case Canvas.KEY_POUND: System.out.println("Pound Key"); break; // default: // System.out.println( "default" ); // return; } }
}
</source>
Key Event with Canvas
<source lang="java">
/* License
* * Copyright 1994-2004 Sun Microsystems, Inc. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistribution of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * * Redistribution in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Sun Microsystems, Inc. or the names of contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * This software is provided "AS IS," without a warranty of any kind. ALL * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE * AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. * * You acknowledge that this software is not designed, licensed or intended * for use in the design, construction, operation or maintenance of any * nuclear facility. */
import javax.microedition.midlet.*; import javax.microedition.lcdui.*;
public class EventEx3 extends MIDlet {
Display display; Command exit;
public EventEx3() { display = Display.getDisplay(this); } public void destroyApp (boolean unconditional) { } public void pauseApp () { System.out.println("App paused."); } public void startApp () { display = Display.getDisplay(this); Canvas canvas = new Canvas() { // anonymous class public void paint(Graphics g) { } protected void keyPressed(int keyCode) { if (keyCode > 0) { System.out.println("keyPressed " +((char)keyCode)); } else { System.out.println("keyPressed action " +getGameAction(keyCode)); } } protected void keyReleased(int keyCode) { if (keyCode > 0) { System.out.println("keyReleased " +((char)keyCode)); } else { System.out.println("keyReleased action " +getGameAction(keyCode)); } } }; // end of anonymous class exit = new Command("Exit", Command.STOP, 1); canvas.addCommand(exit); canvas.setCommandListener(new CommandListener() { public void commandAction(Command c, Displayable d) { if(c == exit) { notifyDestroyed(); } else { System.out.println("Saw the command: "+c); } } }); display.setCurrent(canvas); }
}
</source>
Key MIDlet
<source lang="java">
import javax.microedition.lcdui.Canvas; import javax.microedition.lcdui.rumand; import javax.microedition.lcdui.rumandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Font; import javax.microedition.lcdui.Graphics; import javax.microedition.midlet.MIDlet; public class KeyMIDlet extends MIDlet {
public void startApp() { Displayable d = new KeyCanvas(); d.addCommand(new Command("Exit", Command.EXIT, 0)); d.setCommandListener(new CommandListener() { public void commandAction(Command c, Displayable s) { notifyDestroyed(); } }); Display.getDisplay(this).setCurrent(d); } public void pauseApp() { } public void destroyApp(boolean unconditional) { }
} class KeyCanvas extends Canvas {
private Font mFont = Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_PLAIN, Font.SIZE_MEDIUM); private String mMessage = "[Press keys]"; public KeyCanvas() { } public void paint(Graphics g) { int w = getWidth(); int h = getHeight(); g.setGrayScale(255); g.fillRect(0, 0, w - 1, h - 1); g.setGrayScale(0); g.drawRect(0, 0, w - 1, h - 1); g.setFont(mFont); int x = w / 2; int y = h / 2; g.drawString(mMessage, x, y, Graphics.BASELINE | Graphics.HCENTER); } protected void keyPressed(int keyCode) { int gameAction = getGameAction(keyCode); switch (gameAction) { case UP: mMessage = "UP"; break; case DOWN: mMessage = "DOWN"; break; case LEFT: mMessage = "LEFT"; break; case RIGHT: mMessage = "RIGHT"; break; case FIRE: mMessage = "FIRE"; break; case GAME_A: mMessage = "GAME_A"; break; case GAME_B: mMessage = "GAME_B"; break; case GAME_C: mMessage = "GAME_C"; break; case GAME_D: mMessage = "GAME_D"; break; default: mMessage = ""; break; } repaint(); }
}
</source>
Low-Level Display Canvas:Key Code Example
<source lang="java">
/* J2ME: The Complete Reference James Keogh Publisher: McGraw-Hill ISBN 0072227109
- /
//jad file (please verify the jar size) /* MIDlet-Name: KeyCodeExample MIDlet-Version: 1.0 MIDlet-Vendor: MyCompany MIDlet-Jar-URL: KeyCodeExample.jar MIDlet-1: KeyCodeExample, , KeyCodeExample MicroEdition-Configuration: CLDC-1.0 MicroEdition-Profile: MIDP-1.0 MIDlet-JAR-SIZE: 100
- /
import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class KeyCodeExample extends MIDlet {
private Display display; private MyCanvas canvas; public KeyCodeExample () { display = Display.getDisplay(this); canvas = new MyCanvas(this); } protected void startApp() { display.setCurrent(canvas); } protected void pauseApp() { } protected void destroyApp( boolean unconditional ) { } public void exitMIDlet() { destroyApp(true); notifyDestroyed(); }
} class MyCanvas extends Canvas implements CommandListener {
private Command exit; private String direction; private KeyCodeExample keyCodeExample; public MyCanvas (KeyCodeExample keyCodeExample) { direction = "2=up 8=dn 4=lt 6=rt"; this.keyCodeExample = keyCodeExample; exit = new Command("Exit", Command.EXIT, 1); addCommand(exit); setCommandListener(this); } protected void paint(Graphics graphics) { graphics.setColor(255,255,255); graphics.fillRect(0, 0, getWidth(), getHeight()); graphics.setColor(255, 0, 0); graphics.drawString(direction, 0, 0, Graphics.TOP | Graphics.LEFT); } public void commandAction(Command command, Displayable displayable) { if (command == exit) { keyCodeExample.exitMIDlet(); } } protected void keyPressed(int key) { switch ( key ){ case KEY_NUM2: direction = "up"; break; case KEY_NUM8: direction = "down"; break; case KEY_NUM4: direction = "left"; break; case KEY_NUM6: direction = "right"; break; } repaint(); }
}
</source>