본문 바로가기
Computer/Jlet

[17] 컴포넌트 - (7)CheckboxComponent

by DogBull 2006. 8. 12.
알람 기능이 두 개 제공되는 휴대폰을 가정해 보자. "알람시계1"을 설정하고 "알람시계2"의 시간을 설정해 놓은 후 필요에 의해 둘 다 체크하거나 혹은 하나만 체크하면 설정한 시간에 알람이 울릴 것이다. 이런 경우에 사용되는 컴포넌트가 CheckboxComponent이다. 체크 박스들은 각각 독립적이어서 개별적 상태(On/Off)를 가질 수 있다. 여러 개의 체크 박수들 중 하나만 선택될 수 있도록 체크 박스들을 그룹으로 관리할 수 있는데, 그러기 위해서 CheckboxGroup 클래스를 추가해 주면 된다. 동일한 CheckboxGroup으로 묶여진 체크 박스 들은 맨 처음에 추가된 것만 선택된 상태로 초기화되고, 나머지는 선택되지 않은 상태로 초기화 되는데, 이 값을 바꾸기 위해서는 setState를 사용한다.

CheckboxComponent 클래스의 주요 생성자
- public CheckboxComponent(String str, Image img)
주어진 문자열과 이미지로 새로운 CheckboxComponent를 생성한다.
- public CheckboxComponent(String str, Image img, CheckboxGroup, cbg)
주어진 문자열과 이미지로 그룹핑 된 새로운 CheckboxComponent를 생성한다.
- public CheckboxComponent(String str, Image img, boolean b)
b에 의해 초기 상태가 결정되고, 주어진 문자열과 이미지로 CheckboxComponent를 생성한다.
CheckboxComponent 클래스의 주요 생성자
- public void setState(boolean b)
CheckboxComponent의 선택 상태를 변경한다.
- public void paintContent(Graphics g)
내부를 칠한다.
- public boolean keyNotify(int type, int key)
키 입력을 받으면 호출된다.
- public void setChangeListener(ChangeListener listener, Object obj)
CheckboxComponent에 ChangeListener를 등록한다.


CheckboxGroup은 여러 개의 CheckboxGroup들을 엮어 그룹화된 라디오 버튼처럼 움직이게 한다. 하나의 CheckboxGroup으로 등록된 CheckboxComponent들은 동시에 여러 개라 On상태가 될 수 없고 하나의 CheckboxComponent만이 On 상태가 될 수 있다. 그러므로 하나의 Checkbox가 On 되면 다른 모든 Group으로 묶인 Checkbox 들은 Off가 된다. 초기 값으로는 맨 처음에 등록된 CheckboxComponent가 On 된다.

CheckboxGroup 클래스의 주요 생성자
- public CheckboxGroup()
새로운 CheckboxGroup을 생성한다.
CheckboxGroup 클래스의 주요 메소드
- public void select(CheckboxComponent cbc)
CheckboxGroup로 묶여있는 CheckboxComponent 중에서 주어진 컴포넌트를 On 상태로 한다.

- public CheckboxComponent getSelectedCheckbox()
CheckboxGroup로 묶여 있는 CheckboxComponent 중에서 On 상태인 것을 돌려준다.

- public void setChangeListener(ChangeListener listener, Object obj)
CheckboxGroup에 ChangeListener를 등록한다.



예제를 보도록 하자.
import org.kwis.msp.lcdui.*;
import org.kwis.msp.lwc.*;

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

   LabelComponent   lb=    new LabelComponent();

   CheckboxGroup    cbg=    new CheckboxGroup();

   CheckboxComponent    cbc1=    new CheckboxComponent("전화번호부", null, cbg);
   CheckboxComponent    cbc2=    new CheckboxComponent("자기정보수정", null, cbg);
   CheckboxComponent    cbc3=    new CheckboxComponent("부가서비스", null, cbg);
   CheckboxComponent    cbc4=    new CheckboxComponent("시스템정보", null, cbg);

   public void startApp(String args[]){
       cbg.setChangeListener(this, null);
       cbg.select(cbc1);

       fc.addComponent(lb);
       fc.addComponent(cbc1);
       fc.addComponent(cbc2);
       fc.addComponent(cbc3);
       fc.addComponent(cbc4);

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

   }

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

   public void changed(Component c, Object obj){
       if(cbg.getSelectedCheckbox()==cbc1){
           lb.setLabel("전화번호부");
       }else if(cbg.getSelectedCheckbox()==cbc2){
           lb.setLabel("자기정보수정");
       }else if(cbg.getSelectedCheckbox()==cbc3){
           lb.setLabel("부가서비스");
       }else if(cbg.getSelectedCheckbox()==cbc4){
           lb.setLabel("시스템정보");
       }else{
           lb.setLabel("정의되지않은체크박스입니다.");
       }
   }
};

출력 결과는 다음과 같다.