2012-07-18 3 views
1

물리적 키가 하나 뿐인 휴대 전화가 있으며 BACK 키로 클릭합니다. 그러나 핵심 행사는 LWUIT 1.5에서 발견 될 수 없습니다. 여기 내 코드는 다음과 같습니다.물리적 키가 눌린 이벤트는 LWUIT에서 잡을 수 없습니다.



    import com.sun.lwuit.Command; 
    import com.sun.lwuit.Form; 
    import com.sun.lwuit.events.ActionEvent; 

    public class CustomForm extends Form { 

     public CustomForm() { 
      Command backCmd = new Command("BACK", 2) { 
       public void actionPerformed(ActionEvent evt) { 
        System.out 
          .println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! back cmd evt: " 
            + evt); 
       } 
      }; 
      this.addCommand(backCmd, 0); 
     } 

     public void keyPressed(int aKeyCode) { 
      System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@ key code = " + aKeyCode); 
      super.keyPressed(aKeyCode); 
     } 

     public void keyReleased(int keyCode) { 
      System.out 
        .println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ key released code: " 
          + keyCode); 
      super.keyReleased(keyCode); 
     } 
    } 

그러나 LCDUI 양식으로 키 이벤트를 포착 할 수 있습니다. 다음은 LCDUI 코드입니다.



    import javax.microedition.lcdui.Command; 
    import javax.microedition.lcdui.CommandListener; 
    import javax.microedition.lcdui.Display; 
    import javax.microedition.lcdui.Displayable; 
    import javax.microedition.lcdui.Form; 
    import javax.microedition.lcdui.StringItem; 
    import javax.microedition.midlet.MIDlet; 
    import javax.microedition.midlet.MIDletStateChangeException; 

    public class Test extends MIDlet implements CommandListener { 

     protected void destroyApp(boolean arg0) throws MIDletStateChangeException { 
      // TODO Auto-generated method stub 

     } 

     protected void pauseApp() { 
      // TODO Auto-generated method stub 

     } 

     protected void startApp() throws MIDletStateChangeException { 
      Form form = new Form("Hello World"); 
      StringItem str = new StringItem("HI", "BYE"); 
      form.append(str); 
      Command bc = new Command("Back", Command.BACK, 1); 
      form.addCommand(bc); 
      form.setCommandListener(this); 

      Display.getDisplay(this).setCurrent(form); 
     } 

     public void commandAction(Command c, Displayable d) { 
      System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~ Got command: " 
        + c.getCommandType() + " " + c.getLabel()); 
      if (c.getCommandType() == Command.BACK) { 
       // Application logic for Back button press 
      } 
     } 

    } 

일부 키 이벤트가 LWUIT에 의해 무시됩니까? 누구든지 나를 도울 수 있을까?

답변

0

back은 back 명령으로 보내지고 이후에 전달되지 않습니다.

+0

내 응용 프로그램에서 기본 뒤로 명령을 처리 할 수있는 방법 –

+0

setBackCommand (yourCommand)를 통해 관련된 모든 양식에 추가해야합니다. –

+0

MyForm 클래스에 추가하고 다른 모든 폼을 상속하도록했습니다. MyForm에서, 그때 나는 다시 액션 메서드를 추상화하고 각 자식 폼에 그것을 구현하고 반사를 사용하여 부모 폼에서 현재 폼의 동작을 적용, 그것은 지금 작동하지만, 어떤 문제가 있는지 모르겠다 다음 것 –