본문 바로가기
Computer/Jlet

[14] 컴포넌트 - (4)ListComponent/ListItemComponent

by DogBull 2006. 8. 12.
ListComponent와 ListItemComponent는 부모 클래스도 다르고, 성격도 완전히 다른 클래스이다. 그럼에도 불구하고 이렇게 같이 붂어서 설명하려는 데에는 이유가 있다. 이 둘은 서로 떨어져서는 아무일도 못하기 때문이다.

public class ListComponent      extends  FormComponent
public class ListItemComponent extends  LabelComponent

선언부에서 알 수 있듯이, 두 컴포넌트는 상속받은 부모 클래스가 다르다. 일단 두 컴포넌트의 상호 관계를 살펴 본 후 각 컴포넌트에 대해 상세히 알아보자.

List는 문자 그대로 목록을 나타내는 클래스이다. 앞에서 우리는 Container 계열의 ShellComponent와 FormComponent에 대해 배웠다. ListComponent 역시 Container 역할을 한다. 하지만 다른 Container 계열 컴포넌트와는 달리 단지 ListItemComponent만을 담을 수 있다. 다른 컴포넌트를 담으려 할 경우 IllegalArgumentException이 발생하므로 서로 떨어져서는 아무것도 할 수 없다 하겠다.

Listcomponent는 세가지 타입이 있다.
현재 포커스를 받고 있는 아이템이 선택된 상태과 같게 되는 타입인 SELECT_IMPLICIT,
여러 아이템을 선택 할 수 있는 SELECT_MULTIPLE,
한 개의 아이템만 선택 할 수 있는 SELECT_EXCLUSIVE의 세가지가 있다.
ListComponent 클래스의 주요 생성자
- public ListComponent(int type)
ListComponent의 인스턴스를 주어진 타입으로 생성한다.
ListComponent 클래스의 주요 메소드
- public int append(String str, Image img)
ListComponent에 주어진 문자열과 이미지로 ListItemComponent를 생성하여 추가한다.
- public void addComponent(int index, Component c)
index위치에 주어진 컴포넌트를 추가한다.
- public int addComponent(Component c)
맨 위에 컴포넌트를 추가한다.
- public void setComponent(int index, Component c)
컴포넌트를 대치한다.
- public int insert(int index, String str, Image img)
해당 위치에 주어진 문자열과 이미지로 ListItemComponent를 생성하여 추가한다.
- public void set(int index, String str, Image img)
해당 위치에 주어진 문자열과 이미지로 ListItemComponent를 생성하여 새로 지정한다.
- public String getString(int index)
주어진 위치에 있는 ListItemComponent의 문자열을 얻어온다.
- public Image getImage(int index)
주어진 위치에 있는 ListItemComponent의 이미지를 얻어온다.
- public boolean isSelected(int index)
주어진 위치의 항목이 현재 선택되어 있는지의 여부를 알려준다.
- public int[] getSelectedIndexs()
ListComponent의 항목들 중 현재 선택되어 있는 항목들의 인덱스를 얻어온다.
(멀티 셀렉트가 가능할 경우)
- public int getSelectedIndex()
ListComponent의 항목들 중 현재 선택되어 있는 항목의 인덱스를 얻오온다.
- public void setActionListener(ActionListener al, Object obj)
ListComponent에 ActionListener를 등록한다.
- public void setChangeListener(ChangeListener cl, Object obj)
ListComponent에 ChangeListener를 등록한다.
- protected boolean keyNotify(int type, int key)
키 입력을 받으면 호출된다.
- public void select(int index)
주어진 위치의 항목을 선택한다.
- public void select(ListItemComponent c)
주어진 항목의 선택 상태를 변경한다.
- public void controlNumber(boolean showImage)
번호키의 컨트롤 여부를 지정한다.
- public boolean isControlNumber()
번호키 컨트롤 상태를 반환한다.
- protected Component getNextTraversalComponent()
포커스를 가질 수 있는 다음 컴포넌트를 돌려준다.
- protected Component getPrevTraversalComponent()
포커스를 가질 수 있는 이전 컴포넌트를 돌려준다.


ListItemComponent 클래스의 주요 생성자
- public ListItemComponent(String str, Image img)
ListItemComponent를 생성한다.
- public ListItemComponent(String str, String imgString)
주어진 문자열과 지정한 자원에서 읽어들인 이미지로 ListItemComponent를 생성한다.
ListItemComponent 클래스의 주요 매소드
- public void setState(boolean state)
ListItemComponent의 선택 상태를 지정한다.
- public boolean getState()
현재의 선택 상태를 얻어온다.



예제를 보도록 하자

import org.kwis.msp.lcdui.*;
import org.kwis.msp.lwc.*;

public class wipiTest extends Jlet implements ActionListener, ChangeListener{
  ShellComponent    sc=    new ShellComponent();
  FormComponent     fc=    new    FormComponent();

  LabelComponent    label=    new LabelComponent();

  ListComponent     lc=    new ListComponent(ListComponent.SELECT_EXCLUSIVE);

  public void startApp(String args[]){
       listSet();

       fc.addComponent(label);
       fc.addComponent(lc);

       sc.addComponent(fc);
       sc.show();

  }

  public void pauseApp(){}
  public void resumeApp(){}
  public void destroyApp(boolean b){}

  //ActionListener 를 implements 하였으므로 반드시 구현해 주어야 한다.
  public void action(Component c, Object obj){  
       label.setLabel(lc.getString(lc.getSelectedIndex()));
  }

  //ChangeListener를 implements 하였으므로 반드시 구현해 주어야 한다.
  public void changed(Component c, Object obj){
       action(c, obj);
  }

  public void listSet(){
       ListItemComponent    item1=    new ListItemComponent("화면설정");
       ListItemComponent    item2=    new ListItemComponent("소리설정");
       ListItemComponent    item3=    new ListItemComponent("주소보기");
       ListItemComponent    item4=    new ListItemComponent("게임하기");

       lc.addComponent(item1);
       lc.addComponent(item2);
       lc.addComponent(item3);
       lc.addComponent(item4);

       lc.setActionListener(this, null);
       lc.setChangeListener(this, null);
  }
};

출력결과는 다음과 같다


ListComponent 클래스 생성자의 매개변수를 변경하여 각자 출력 결과를 보길 바란다.

ex)
ListComponent     lc=    new ListComponent(ListComponent.SELECT_MULTIPLE); 또는
ListComponent     lc=    new ListComponent(ListComponent.SELECT_IMPLICIT);