解决J2ME开发中的连续按键问题(2) 下面是应用程序截图和源代码。 
package com.j2medev;
import javax.microedition.lcdui.*; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException;
public class KeyActionMIDlet extends MIDlet {
private Display display;
private MainCanvas mainCanvas;
protected void startApp() throws MIDletStateChangeException {
display = Display.getDisplay(this); mainCanvas = new MainCanvas(); new Thread(mainCanvas).start(); display.setCurrent(mainCanvas);
}
protected void pauseApp() { }
protected void destroyApp(boolean arg0) throws MIDletStateChangeException { } }
package com.j2medev;
import javax.microedition.lcdui.*;
public class MainCanvas extends Canvas implements Runnable { private String buttonPressed; private boolean leftPressed; private boolean rightPressed; private int px = getWidth() / 2; public final int py = getHeight() / 2;
public MainCanvas() { buttonPressed = " "; }
private void left() { if (px >= 0) { px--; } buttonPressed = "LEFT"; repaint(); }
private void right() { if (px <= getWidth()) { px++; } buttonPressed = "RIGHT"; repaint(); }
public void run() { while (true) { if (leftPressed) { left(); } if (rightPressed) { right(); }
try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } } } public void paint(Graphics g) { g.setColor(0xFFFFFF); g.fillRect(0, 0, getWidth(), getHeight()); g.setColor(0x000000);
g.drawString(buttonPressed, 20, 20, Graphics.LEFT | Graphics.TOP); g.drawString("J2ME", px, py, Graphics.HCENTER | Graphics.TOP); }
public void keyReleased(int keyCode) { int action = getGameAction(keyCode); switch (action) { case LEFT: leftPressed = false; buttonPressed = ""; break; case RIGHT: rightPressed = false; buttonPressed = ""; break; default: break; } repaint(); } public void keyPressed(int keyCode) { int action = getGameAction(keyCode);
switch (action) { case LEFT: left(); leftPressed = true; break;
case RIGHT: right(); rightPressed = true; break;
default: break; } repaint();
} public void keyRepeated(int keyCode) { int action = getGameAction(keyCode); switch (action) { case LEFT: left(); break; case RIGHT: right(); break;
default: break; } repaint(); } }
|