2012-07-25 1 views
5

LWUIT에서 Button이 자신의 ActionListener (button.addActionListener를 통해)를 가질 수있는 이유는 무엇입니까?버튼에 액션 리스너가 있고 LWUIT에 명령이없는 이유는 무엇입니까?

특정 명령에 대한 수신기를 가질 수있는 유일한 방법은 ActionListener를 양식에 추가하고 이벤트가 발생한 Command가 들어있는 수신기를 아래에서 확인하는 것입니다.

public void startApp() { 
    Display.init(this); 
    f = new Form("Mixed Record"); 
    exit = new Command("Exit"); 
    start = new Command("Start"); 
    Button button = new Button("Button"); 

    f.addCommand(exit); 
    f.addCommand(start); 
    f.addCommand(delete); 
    f.addComponent(button); 

    f.addCommandListener(new ActionListener() { 

     public void actionPerformed(ActionEvent ae) { 
      if (ae.getCommand().equals(exit)) { 
       //Do Exit command code 
      } else if (ae.getCommand().equals(start)) { 
       //Do Start command code 
      } 
     } 
    }); 

    button.addActionListener(new ActionListener() { 

     public void actionPerformed(ActionEvent ae) { 
      //Do button code 
     } 
    }); 

    f.show(); 
} 

답변

6

글쎄, LWUIT를 작성한 사람들이 왜 그 결정을 내렸는 지 정확히 말할 수는 없지만 그것이 합리적인 이유는 몇 가지 있습니다.

양식에 여러 명령이 들어 있으면 메뉴에 그룹화됩니다. 사용자가 펼치고 메뉴를 접을 때마다 최대 하나의 명령이 실행됩니다. 이와 같이, 명령은 개념적으로 Buttons보다 서로 연결되어 있습니다. 특히 Button 하위 클래스를 하나의 Form에서 다른 Form으로 재사용하는 경우는 드뭅니다.

LWUIT 양식의 API를 MIDP 사양의 LCDUI 양식과 비슷하게 만드는 것에 대한 우려도있었습니다. 이미 코드에서 2 개 익명의 내부 클래스합니다 (ActionListener를 서브 클래스)가

:

은 또한 코드가 결정 중 하나 개 긍정적 인 결과를 보여줍니다 것을 좋아한다. 각 명령에 고유 한 ActionListener가 있으면 3 개의 이름이없는 내부 클래스를 작성했을 것입니다. 개발자는 이름없는 내부 클래스가 여러 개인 스택 추적 코드를 살펴볼 때 각 명명 된 클래스에 둘 이상의 클래스를 포함하는 것이 바람직하지 않다는 것을 알게 되더라도 많은 일을하는 경향이 있습니다.

+0

나는 본다. 그것은 이제 감각이 있습니다. (성가신 것 대신에). 자세한 답장을 보내 주셔서 감사합니다! –

+1

Command는 액션 리스너입니다 (actionPerformed 메소드에서 코드를 서브 클래 싱하여 코드를 작성할 수 있습니다.) 그래서 액션 리스너를 액션 리스너에 추가하는 것은 다소 혼란스러운 간접적 인 것처럼 보였습니다. 그래서 우리는하지 않았습니다. (원저자 공동 작성자 LWUIT의) –