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

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

by o테리o 2011. 12. 14.

회사의 업무로 인해서 UI객체 3번째를 이제서야 올리게 되네요...
지금 시간은 퇴근시간인데... ㅠ.ㅠ
그리고 이번 샘플에는 시간이 좀 많이 투자되어버렸네요.

일반 자료에서 찾아서 만들었던 것을 그나마 소스가 쓸만해야 되니깐 쓸만하도록 수정은 했는데... 정말 쓸만한지는 잘 모르겠네요.

그리고 안타깝게도... 강좌를 읽는 것보다 사용기에 대해서 더 많은 분들이 관심을 갖으시더군요...
강좌는 접고 사용기 중심으로 해야 되는건 아닌지... ㅠ.ㅠ

오늘 소개할 UI들은 다음과 같습니다.

  1. DateTimePicker
    • 말그대로 Date를 Picker를 활용해서 선택하는 객체입니다.
  2. FilePicker
    • 파일 탐색기처럼 파일을 찾아서 선택하는 객체입니다.
  3. SpinBox
    • 배열을 활용해서 돌아가는 스핀박스를 구현해서 선택하는 객체입니다.
  4. DataSet을 활용한 AutoCompleteField
    • 배열로 생성한 DataSet를 활용해서 AutoCompleteField를 생성한다.
  5. DataSource를 활용한 AutoCompleteField
    • PIM나 장비의 DataSource등을 활용해서 AutoCompleteField를 생성한다.
설명을 하고나니 왠지 말도 안되는 허접한 내용이네요.
전 소스를 제공하니 설명이 허접해도 이해해 주시기 바랍니다. ㅡㅡㅋ
001.package org.bbone.sample;
002.import java.util.Calendar;
003.import java.util.Date;
004.import java.util.Vector;
005.import net.rim.device.api.collection.util.BasicFilteredList;
006.import net.rim.device.api.ui.Field;
007.import net.rim.device.api.ui.FieldChangeListener;
008.import net.rim.device.api.ui.FocusChangeListener;
009.import net.rim.device.api.ui.UiApplication;
010.import net.rim.device.api.ui.component.AutoCompleteField;
011.import net.rim.device.api.ui.component.ButtonField;
012.import net.rim.device.api.ui.component.Dialog;
013.import net.rim.device.api.ui.component.KeywordFilterField;
014.import net.rim.device.api.ui.component.LabelField;
015.import net.rim.device.api.ui.component.SeparatorField;
016.import net.rim.device.api.ui.component.TextSpinBoxField;
017.import net.rim.device.api.ui.container.MainScreen;
018.import net.rim.device.api.ui.container.SpinBoxFieldManager;
019.import net.rim.device.api.ui.picker.DateTimePicker;
020.import net.rim.device.api.ui.picker.FilePicker;
021.public class UiSample3 extends UiApplication {
022.public UiSample3() {
023.UiSampleScreen uiScreen = new UiSampleScreen();
024.pushScreen(uiScreen);
025.}
026.public static void main(String[] args) {
027.UiSample3 theApp = new UiSample3();
028.theApp.enterEventDispatcher();
029.}
030.}
031.class UiSampleScreen extends MainScreen implements FieldChangeListener{
032.ButtonField datePickerButton;
033.ButtonField filePickerButton;
034.ButtonField spinBoxButton;
035.TextSpinBoxField spinBoxDays;
036.TextSpinBoxField spinBoxMonths;
037.SpinBoxFieldManager spinBoxMgr;
038.KeywordFilterField keywordField;
039.Vector countries;
040.final String[] DAYS   = {"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
041.final String[] MONTHS = {"January","February","March","April","May","June","July","August","September","October","November","December"};
042.public UiSampleScreen() {
043.setTitle("UI SAMPLE NO3");
044.//        ButtonField를 추가해서 버튼을 클릭했을 때 DatePicker를 호출하는 이벤트를 생성한다.
045.datePickerButton = new ButtonField("DatePickerButton", ButtonField.CONSUME_CLICK);
046.datePickerButton.setChangeListener(this);
047.add(datePickerButton);
048.add(new SeparatorField());
049.//        ButtonField를 추가해서 버튼을 클릭했을 때 FilePicker를 호출하는 이벤트를 생성한다.
050.filePickerButton = new ButtonField("FilePickerButton", ButtonField.CONSUME_CLICK);
051.filePickerButton.setChangeListener(this);
052.add(filePickerButton);
053.add(new SeparatorField());
054.spinBoxButton = new ButtonField("SpinBoxButton", ButtonField.CONSUME_CLICK);
055.spinBoxButton.setChangeListener(this);
056.add(spinBoxButton);
057.add(new SeparatorField());
058.add(new LabelField("BasicFielterList Use DataSet"));
059.BasicFilteredList filterList1 = new BasicFilteredList();
060.filterList1.addDataSet(1, DAYS, "days", BasicFilteredList.COMPARISON_IGNORE_CASE);
061.AutoCompleteField autoCompleteField1 = new AutoCompleteField(filterList1);
062.add(autoCompleteField1);
063.add(new SeparatorField());
064.add(new LabelField("BasicFielterList Use DataSource"));
065.BasicFilteredList filterList2 = new BasicFilteredList();
066.filterList2.addDataSource(
067.1,
068.BasicFilteredList.DATA_SOURCE_CONTACTS,
069.BasicFilteredList.DATA_FIELD_CONTACTS_NAME_FULL | BasicFilteredList.DATA_FIELD_CONTACTS_COMPANY | BasicFilteredList.DATA_FIELD_CONTACTS_EMAIL,
070.BasicFilteredList.DATA_FIELD_CONTACTS_NAME_FULL | BasicFilteredList.DATA_FIELD_CONTACTS_COMPANY | BasicFilteredList.DATA_FIELD_CONTACTS_EMAIL,
071.BasicFilteredList.DATA_FIELD_CONTACTS_NAME_FULL,
072.-1,
073.null);
074.AutoCompleteField autoCompleteField2 = new AutoCompleteField(filterList2);
075.add(autoCompleteField2);
076.add(new SeparatorField());
077.}
078.//    Button 클릭시에 반응하는 리스너
079.public void fieldChanged(Field field, int context) {
080.if(field == datePickerButton){
081.UiApplication.getUiApplication().invokeLater(new Runnable() {
082.public void run() {
083.DateTimePicker datePicker = DateTimePicker.createInstance();
084.datePicker.doModal();
085.Calendar cal = datePicker.getDateTime();
086.Date date = cal.getTime();
087.Dialog.alert("DateTimePicker selected : " + date.toString());
088.}
089.});
090.}else if(field == filePickerButton){
091.UiApplication.getUiApplication().invokeLater(new Runnable() {
092.public void run() {
093.FilePicker filePicker = FilePicker.getInstance();
094.filePicker.setListener(new FilePicker.Listener() {
095.public void selectionDone(String selected) {
096.Dialog.alert("FilePicker selected : " + selected);
097.}
098.});
099.filePicker.show();
100.}
101.});
102.}else if(field == spinBoxButton){
103.UiApplication.getUiApplication().invokeLater(new Runnable() {
104.public void run() {
105.spinBoxMgr = new SpinBoxFieldManager();
106.spinBoxMgr.setClickToLock(false);
107.spinBoxMonths = new TextSpinBoxField(MONTHS);
108.spinBoxMonths.setFocusListener(new FocusChangeListener() {
109.//                        eventType 1: FOCUS_GAINED, 2: FOCUS_CHANGED, 3: FOCUS_LOST
110.public void focusChanged(Field field, int eventType) {
111.if(field == spinBoxMonths && eventType == FOCUS_LOST){
112.Dialog.alert("You selected Months : " + (String)spinBoxMonths.get(spinBoxMonths.getSelectedIndex()));
113.}
114.}
115.});
116.spinBoxDays = new TextSpinBoxField(DAYS);
117.spinBoxDays.setFocusListener(new FocusChangeListener() {
118.//                        eventType 1: FOCUS_GAINED, 2: FOCUS_CHANGED, 3: FOCUS_LOST
119.public void focusChanged(Field field, int eventType) {
120.if(field == spinBoxDays  && eventType == FOCUS_LOST){
121.Dialog.alert("You selected Days : " + (String)spinBoxDays.get(spinBoxDays.getSelectedIndex()));
122.}
123.}
124.});
125.spinBoxMgr.add(spinBoxMonths);
126.spinBoxMgr.add(spinBoxDays);
127.Dialog diaLog = new Dialog(Dialog.OK, "SPINBOX", 0, null, 0);
128.diaLog.add(spinBoxMgr);
129.diaLog.show();
130.}
131.});
132.}
133.}
134.//     종료시에 저장할지에 대한 프롬프트에서 무조건 저장하는 것으로 해서 종료한다.
135.public boolean onSavePrompt(){
136.return true;
137.}
138.}

spinBox는 선택하는 방법을 아직은 찾아봐도 잘 모르겠네요.
나중에 찾아서 알게되면 올려드리도록 하겠습니다.