본문 바로가기
스마트폰 프로그래밍/블랙베리

[Blackberry] 블랙베리 개발하기-5(UI객체2)

by o테리o 2011. 12. 14.

지난번에 이어서 이번에도 UI객체에 대해서 설명을 하도록 하겠습니다.
이번에 설명드릴 객체는 다음과 같습니다.

  1. ObjectChoiceField
    • 배열로 정의한 객체를 selectBox 형태로 보여주는 UI 객체입니다.
  2. NumericChoiceField
    • 시작과 끝의 값을 지정해서 지정한 증가값으로 selectBox를 보여주는 UI 객체입니다.
  3. CheckboxField
    • 이름그대로 CheckBox  UI 객체입니다.
  4. ListField
    • Vector 객체에 객체를 담아서 ListField로 보여주는 UI 객체입니다.
    • 지정된 객체는 Graphics 객체를 활용해서 보여줍니다.
  5. RadioButtonGroup & RadioButtonField
    • RadioButtonField는 이름 그대로 RadioButton UI 객체입니다.
    • RadioButtonGroup는 RadioButtonField를 그룹화 시켜주는 UI 객체입니다.

위에 나열한 객체를 순서대로 생성해서 입력한 모습
 
다른 객체를 더 넣고 싶었지만 화면에 이넘들만으로 꽉 차네요 ㅡㅡ;;

ObjectChoiceField를 선택했을 때의 모습
 
배열로 선택한 날짜 리스트가 입력되어 있다.

NumericChoiceField를 선택했을 때의 모습
 
시작은 1부터 마지막은 31까지 그리고 증가값은 1로 설정한 NumericChoiceField 객체

CheckBoxField, ListField, RadioButtonField를 보여주는 모습
 
CheckBoxField에서는 ReadOnly 옵션을 통해서 초기지정된 값을 변경 못 하도록 설정할 수 있다.
ListField는 입력된 값을 순차적으로 보여준다.
RadioButtonFieldRadioButtonGroup으로 그룹화해서 Option1과 Option2 중에서 하나만 선택되도록 하였다.

그럼 오늘도 역시 많은 분들이 원하시는 소스입니다.
지난번에 설명드렸듯이 시뮬레이터에서 한글이 지원되지 않아서 필드에 입력한 글자는 모두 영문으로 입력하였습니다. 이해해 주세요.

001.package org.bbone.sample;
002. 
003.import java.util.Vector;
004. 
005.import net.rim.device.api.system.Display;
006.import net.rim.device.api.ui.Graphics;
007.import net.rim.device.api.ui.UiApplication;
008.import net.rim.device.api.ui.component.CheckboxField;
009.import net.rim.device.api.ui.component.ListField;
010.import net.rim.device.api.ui.component.ListFieldCallback;
011.import net.rim.device.api.ui.component.NumericChoiceField;
012.import net.rim.device.api.ui.component.ObjectChoiceField;
013.import net.rim.device.api.ui.component.RadioButtonField;
014.import net.rim.device.api.ui.component.RadioButtonGroup;
015.import net.rim.device.api.ui.component.SeparatorField;
016.import net.rim.device.api.ui.container.MainScreen;
017. 
018.public class UiSample2 extends UiApplication {
019. 
020.public UiSample2() {
021.UiSampleScreen uiScreen = new UiSampleScreen();
022.pushScreen(uiScreen);
023.}
024. 
025.public static void main(String[] args) {
026.UiSample2 theApp = new UiSample2();
027.theApp.enterEventDispatcher();
028.}
029.}
030. 
031.class UiSampleScreen extends MainScreen{
032.private ListField listField;
033.private Vector listElement;
034.public UiSampleScreen() {
035.setTitle("UI SAMPLE NO2");
036.//        배열에 저장되어있는 값으로 select box를 생성한다.
037.String[] days = {"Monday","Tuesday","Wedneday","Thursday","Friday","Saturday","Sunday"};
038.//        배열은 0부터 시작하고 iSetTo에 설정되어 있는 값으로 초기화됨.
039.int iSetTo = 1;
040.add(new ObjectChoiceField("Object Drop-down", days, iSetTo));
041.add(new SeparatorField());
042.//        숫자의 시작과 끝을 지정해서 select box를 생성한다.
043.//        시작숫자
044.int iStartAt = 1;
045.//        종료숫자
046.int iEndAt = 31;
047.//        숫자생성시 증가값
048.int iIncrement = 1;
049.//        초기셋팅값
050.iSetTo = 9;
051.add(new NumericChoiceField("Number Drop-down", iStartAt, iEndAt, iIncrement, iSetTo));
052.add(new SeparatorField());
053.//        checkBox를 생성한다.
054.add(new CheckboxField("Checked CheckBox", true));
055.add(new CheckboxField("UnCheck CheckBox", false));
056.add(new CheckboxField("ReadOnly CheckBox", false, this.READONLY));
057.add(new SeparatorField());
058.listElement = new Vector();
059.listField = new ListField();
060.ListCallback callback = new ListCallback();
061.listField.setCallback(callback);
062.initializeList();
063. 
064.add(listField);
065.add(new SeparatorField());
066.RadioButtonGroup radioButtonGroup = new RadioButtonGroup();
067.add(new RadioButtonField("Option 1", radioButtonGroup, true));
068.add(new RadioButtonField("Option 2", radioButtonGroup, false));
069.add(new SeparatorField());
070.}
071.//    ListField에 표시할 내용 지정
072.private void initializeList(){
073.String listFieldName = "-----List Field----";
074.String itemOne = "List item One";
075.String itemTwo = "List item Two";
076.listElement.addElement(listFieldName);
077.listElement.addElement(itemOne);
078.listElement.addElement(itemTwo);
079.reloadList();
080.}
081.//    ListField의 사이즈를 다시 확인해서 지정합니다.
082.private void reloadList(){
083.listField.setSize(listElement.size());
084.}
085.//    종료시 확인 팝업을 표시하지 않도록 설정
086.public boolean onSavePrompt(){
087.return true;
088.}
089.//    ListFieldCallback 인터페이스는 ListField를 그려주기 위한 인터페이스다.
090.//    ListField는 ListFieldCallback 인터페이스를 꼭 참조해서해서 사용한다.
091.private class ListCallback implements ListFieldCallback{
092.//        호출된 해당 행을 그릴때 호출
093.public void drawListRow(ListField list, Graphics g, int index, int y, int w){
094.String text = (String)listElement.elementAt(index);
095.g.drawText(text, 0, y, 0, w);
096.}
097.//        목록에서 항목을 가져옵니다.
098.public Object get(ListField list, int index){
099.return listElement.elementAt(index);
100.}
101.//        리스트의 처음 문자열의 위치를 가져옵니다.
102.public int indexOfList(ListField list, String prefix, int string){
103.return listElement.indexOf(prefix, string);
104.}
105.//        ListField의 높이를 가져옵니다.
106.public int getPreferredWidth(ListField list){
107.return Display.getWidth();
108.}
109.}
110.}

오늘은 여기까지 입니다.
아직도 소개할 UI가 조금 더 남아 있기에 다음에도 UI에 관련되서 설명 드리도록 하겠습니다.
그런데 걱정은 회사일이 다시 바빠질 기미가 보이네요 ㅡㅡ;;;