Glenncito
Glenncito

Reputation: 930

I ported my midlet to Blackberry and I can't assign a listener to the ESCAPE key

Here is some of the code in my midlet:

the addKeyListener method presents an error as the function is not recognized.

import net.rim.device.api.system.KeyListener;
import net.rim.device.api.ui.Keypad;

public class PhraZApp extends javax.microedition.midlet.MIDlet implements ActionListener{

public PhraZApp {
 addKeyListener (new KeyPadListener());
}


 protected void keyPressed(int key) {
    System.out.println(key);
}

public void actionPerformed(ActionEvent evt) {
    System.out.println(evt.getKeyEvent());
}

 public final class KeyPadListener implements KeyListener {

    public boolean keyChar(char key, int status, int time) {

        return false;
    }

    public boolean keyDown(int keycode, int time) {
        if (Keypad.KEY_ESCAPE == Keypad.key(keycode)) {
                  System.out.println("key: " + keycode);
        return true;
    }
            //let the system to pass the event to another listener.
    return false;
    }

    public boolean keyUp(int keycode, int time) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public boolean keyRepeat(int keycode, int time) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public boolean keyStatus(int keycode, int time) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}

The keyPressed action is not heard by any of those listeners.

Ive been told to add the keylistner to a GUI component, but none that I try it with accept it. Furthermore, one of the possible issues is that the addKeyListener method is not declared, but in that case I don't know how to declare it.

If i change extends javax.microedition.midlet.MIDlet to extends UiApplication, the addKeyListener becomes accepted but the entire midlet falls to a RuntimeErrorException.

How can I get my Midlet to hear the escape key? I have searched through many forums and none of the suggestions have worked so far.

Thanks in advance.

Upvotes: 3

Views: 369

Answers (2)

Glenncito
Glenncito

Reputation: 930

Thanks to Shai pointing me in the right direction, I solved it.

Here is how I did it.

Command backCommand = new Command("",Keypad.KEY_ESCAPE);
form.setBackCommand(backCommand);

then

 public void actionPerformed(ActionEvent evt) {

    if (evt.getCommand().getId() ==Keypad.KEY_ESCAPE){
        //execution code  
    }

I didn't try, but if I had included text in the command I imagine it would appear as such when I push the menu button. The important thing is that I finally got the MIDlet to hear out the escape button after MANY hours of trying and searching for solutions.

Upvotes: 1

Shai Almog
Shai Almog

Reputation: 52760

You need to create a LWUIT Command and assign it to the parent form using the setBackCommand method. You can handle the command event like you handle every other command in LWUIT. E.g. through a command listener or even just by subclassing it and overriding actionPerformed(ActionEvent).

Upvotes: 2

Related Questions