亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

探索J2ME:創建開銷細節表單

2019-11-18 12:45:55
字體:
來源:轉載
供稿:網友

  Sun推出的java 2 Micro Edition (J2ME) 可以讓開發人員創建專用于各類手持設備的應用程序,比如傳統的PDA到所謂的智能電話等。為了利用MIDP(Mobile Information Device PRofile:移動信息設備框架)向讀者介紹J2ME的開發知識,我將引領讀者了解和把握一個完整J2ME應用程序的創建過程,這一程序在本系列文章中都被命名為EXPenses。
  在上一篇文章里我向讀者介紹了Expenses采用的主要MIDlet,同時還討論了兩種lcdui用戶界面組件: Command和 List。本文接著介紹用來編輯現有開銷項目或者添加新項目的具體情況,由此令開發人員從此步入Item組件一族的殿堂。
  現在我們就開始編程!首先下載 Expenses的升級源代碼,然后看看新的DetailForm表單,如圖A中的DefaultGrayPhone模擬器所示。
  圖A
  探索J2ME:創建開銷細節表單


  新的細節表單
  首先讓我們查看新表單,然后是Expenses類,最后在應用程序中編寫DetailForm。
  設計新表單
  DetailForm擴展了Form基類(而后者又擴展了Screen,所以該類包含了其他組件)并且實現了commandListener和ItemStateListener接口,同時可以處理自己的事件。假如你已經閱讀過相應的代碼,那么你應該注重到DetailForm的API中有個setDestroyListener方法,該方法接受一個類實例,而這個類實例則實現了可定制的DestroyListener接口。初始化lcdui所采用的事件通知機制就可以通知DetailForm的控制MIDlet (用戶已經完成了該組件,它要用到該表單)。一旦MIDlet收到事件,它就會使用Display.setCurrent 激活其他Screen組件。
  為什么我要不厭其煩地討論事件機制的細節呢?這是因為我想更多地用到DetailForm表單而非僅僅一個MIDlet,當然,最開始還是先讓咱們看看Items。
  查看構造器
  DetailForm的構造器代碼如程序清單A所示。這個構造器以ExpenseInfo的一個實例作為其參數,這樣我就可以處理現有項目的編輯功能,同時還可以在同一代碼的基礎之上創建新項目。DetailForm通過對基類Form構造器的調用設置其名稱,然后創建4個 Item用戶界面組件,它們是一個DateField、兩個TextFields和一個ChoiceGroup,其功能就是顯示ExpenseItem的有關信息,另外還要加上兩個Commands。
  正如我們現在都知道的那樣,Item組件族派生于Item抽象類,同大多數家族成員一樣,這類組件有很多性質是相同的。首先, Items 可以放在Screen對象上。其次,它們共享單一事件itemStateChange,該事件提示組件所表示的數據發生了變化。
  DateField
  DateField和TextField組件的用途從它們的名字就可以看出來。DateField顯示日期,用戶可以由此通過熟悉的日歷界面選擇新的日期。DateFields具有若干種模式,具體設置可以這樣做:傳遞三種靜態DateField常量之一作為構造器的第2個參數。
  DateField.DATE_TIME設置DateField為顯示日期和時間。
  DateField.DATE設置組件顯示和編輯日期(不對時間操作)。
  DateField.TIME只顯示和編輯時間(不對日期操作)。
  因為我們只關心Expenses程序中的日期,所以我創建的dfDateDateField組件具有唯日期屬性,如清單A所示。
  TextFields
  TextField組件顯示文本,同時答應用戶編輯文本,在功能上類同于桌面應用程序中的文本框。TextFields 支持某些基本的輸入限制功能,而且這類功能可以在創建組件的時候由構造器的最后一個參數設置。除了對輸入信息進行限制以外,這些約束條件還可以簡化電話風格鍵盤的數據輸入操作,因為約束只承認給定鍵的某些特定字符(比如,只有數字按鈕上的數字可以輸入)??赡艿募s束值如下:
  TextField.ANY:任何信息都可以輸入;文本、非凡字符和數值等。
  TextField.EMAILADDR:只有組成有效電子郵件地址的字符才可以輸入。
  TextField.NUMERIC:只能輸入數值。記住,MIDP不支持浮點數值,所以該約束條件只答應輸入整數。
  TextField.PASSWord:和傳統的密碼輸入方式相同,用星號(*)取代用戶輸入的密碼信息。
  TextField.PHONENUMBER:只能輸入組成有效電話號碼的信息。
  TextField.URL:只能輸入合法組成URL的字符。
  fmDetail表單包含了兩個TextFields:其一是tfDesc,它答應輸入事件的文本說明(比如“Lunch”)。其二是tfAmount,它記錄開銷的美元數量,因此通常由TextField.NUMERIC約束創建。
  ChoiceGroup
  細節表單的cgCategory組件是一個ChoiceGroup,用戶可以把開銷放到預先設置的開銷類別里: Meals、Lodging、Car、Entertainment或者Miscellaneous。ChoiceGroups 在功能上等同于List組件,后者我在上一篇文章中已經有所介紹,但是它們只支持EXCLUSIVE和 MULTipLE格式(沒有IMPLICIT ChoiceGrou這類東西)。同樣的,作為Item組件,ChoiceGroups 會在操作事件的時候觸發itemStateChanged事件,而Lists則觸發 commandAction事件。
  給ChoiceGroup添加項目有兩種方法。首先,你可以構造一個空組件然后通過append或者 insert方法加入項目。其次,你還可以傳遞一個包含項目的String數組(這些項目是你希望ChoiceGroup顯示的)給重載的構造器。這兩種方法各有高低,但我在這里采用了第2種方法,主要是為了能讓我對中心位置保存的類別列表(作為靜態數組ExpenseInfo的成員)有一定的選擇能力。這樣就可以很方便地添加新類別或者讓用戶在將來具有這樣做的能力。
  在ChoiceGroup中給每一項指定圖標也是可以的。當然,這里沒必要做了免得程序變得復雜,所以我打算在將來的文章中再討論。
  事件處理
  DetailForm上的Items 都能再用戶操作其數據時觸發itemStateChanged事件。如程序清單 B所示。itemStateChanged的工作方式和commandAction事件相同:它檢查產生事件的Item,確定應該采取的行動。在本文的例子中, DetailForm更新其私有的ExpenseItem實例來匹配用戶修改的數據。
  這里唯一需要具體解釋的是tfAmount變動事件的處理。不支持浮點數字顯然令美元和美分數量的處理變得復雜起來,我也碰到了這樣的難題。有兩種解決辦法:給美元和美分分別提供TextFields 作為數值表示部分,或者總是假定最后兩位數字代表美分。不過這就需要用戶用美分來記錄數值(100代表1美元)。
  當然,DetailForm也處理自身的兩個組件cmOK和cmCancel所觸發的commandAction事件。只要用戶調用了以上兩個組件之一, DetailForm就會調用DestroyListener.requestDestroy。假如用戶調用cmOK,私有的ExpenseInfo實例就會被告之保存對其所進行的修改。
  歸到一塊
  現在只需要修改Expenses MIDlet來利用DetailForm即可。期間需要三個步驟:
  實現Expenses中的DestroyListener以便在用戶通過其兩個組件之一關閉程序時破壞DetailForm并且顯示lsMain。
  修改Expenses.commandAction (程序清單C) 以便用戶在選擇項目時內容將顯示在DetailForm中。
  修改Expenses.commandAction,這樣一旦用戶調用了cmAdd,DetailForm就會被創建并顯示一個新的、空白的ExpenseInfo實例。
  設計問題:為什么要有兩個MIDlets?
  你在看代碼的時候可能注重到了,代碼中有兩個MIDlets,最初的Expenses和新的NewExpense MIDlet。這樣做的原因很簡單:在大多數情況下,Expenses的用戶會打開程序僅僅添加某個新的開銷項目。所以我們的設計反映了兩個基本的移動應用程序設計原則:方便用戶操作,提供最常用功能的快捷方式。
  NewExpense簡單地復制了Expenses中調用cmAdd命令時發生的行為。它創建一個新的、空白的ExpenseInfo實例和一個顯示前者的DetailForm實例。當然,在這個時候,應用程序還沒有受到數據存儲的支持,所以任何通過NewExpense新加入的項目都不會出現在Expenses里。沒關系,后面我們就要說到這一點了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人情趣片在线观看免费| 国产精品久久久av久久久| 国内精品免费午夜毛片| 亚洲午夜久久久久久久| 亚洲国产精品999| 国产成+人+综合+亚洲欧洲| 欧美激情综合色综合啪啪五月| 亚洲精品视频网上网址在线观看| 亚洲va国产va天堂va久久| 国产精品第3页| 欧美视频二区36p| 久久国产精品免费视频| 成人黄色片网站| 全球成人中文在线| 国自产精品手机在线观看视频| 欧美激情亚洲视频| 亚洲a在线观看| 欧美激情一区二区三区高清视频| 亚洲视频在线观看视频| 九九热精品在线| 日韩在线观看电影| 成人做爽爽免费视频| 亚洲精品国产精品国自产观看浪潮| 国产精品国产亚洲伊人久久| 久久精品亚洲94久久精品| 亚洲一区二区三区777| 亚洲影院在线看| 黄网动漫久久久| 欧美亚洲另类在线| 91在线视频一区| 91在线视频一区| 久久躁日日躁aaaaxxxx| 91亚洲精品久久久| 欧美激情视频一区二区三区不卡| 国产日韩专区在线| 国产丝袜一区视频在线观看| 国产精品久久视频| 最近2019年日本中文免费字幕| 在线播放日韩欧美| 欧美电影在线观看完整版| 97久久精品人人澡人人爽缅北| 91精品免费看| 人体精品一二三区| 91国语精品自产拍在线观看性色| 中文字幕av一区中文字幕天堂| 亚洲午夜精品久久久久久久久久久久| 国外成人性视频| 日产精品久久久一区二区福利| 日韩在线视频观看| 亚洲丁香久久久| 亚洲性生活视频| 最近2019年好看中文字幕视频| 91久久精品国产| 国产精品美女av| 136fldh精品导航福利| 日韩精品极品在线观看播放免费视频| 国产精品久久久久久av福利| 2023亚洲男人天堂| 国产精品99久久久久久久久| 亚洲黄在线观看| 欧美亚洲国产日韩2020| 91亚洲永久免费精品| 欧美特黄级在线| 上原亚衣av一区二区三区| 国产成人97精品免费看片| 欧美性猛交xxxx乱大交蜜桃| 亚洲最新在线视频| 亚洲影视九九影院在线观看| 国产偷国产偷亚洲清高网站| 成人免费视频网址| 日本视频久久久| 亚洲综合精品伊人久久| 日韩女优人人人人射在线视频| 亚洲日本中文字幕| 国产日韩av高清| 亚洲毛片在线观看| 一区二区三区视频免费在线观看| 亚洲黄色在线观看| 中文字幕亚洲情99在线| 尤物tv国产一区| 久久影院免费观看| 国产日产欧美a一级在线| 日韩国产中文字幕| 成人综合网网址| 日本中文字幕久久看| 久热国产精品视频| 日韩中文字幕在线免费观看| 国产精品爱啪在线线免费观看| 91在线视频成人| 欧美美女15p| 欧美乱妇高清无乱码| 一色桃子一区二区| 欧美激情视频一区| 一区二区三区在线播放欧美| 精品一区二区三区电影| 亚洲成人久久网| 日韩毛片在线观看| 欧美黑人xxx| 国产精品视频999| 国产精品美女免费看| 久久精品小视频| 亚洲毛片在线观看| 欧美日韩中文字幕日韩欧美| 国内精品一区二区三区| 国产免费一区二区三区在线能观看| 国产精品wwww| 久久影视电视剧免费网站| 色偷偷av一区二区三区乱| 亚洲精品成a人在线观看| 一区二区欧美久久| 国产丝袜精品第一页| 日本久久久久久久| 国产午夜精品理论片a级探花| 亚洲欧美国产视频| 欧美在线观看日本一区| 1769国产精品| 91精品国产一区| 国产精品第一视频| 亚洲精品有码在线| 亚洲国产精品福利| 亚洲天堂av在线播放| 色偷偷噜噜噜亚洲男人的天堂| 欧美激情精品久久久久久变态| 欧美激情影音先锋| 久久久91精品国产一区不卡| 最近的2019中文字幕免费一页| 91av成人在线| 日韩视频在线观看免费| 久久久免费精品视频| 国产精品999999| 日韩在线免费观看视频| 国产精品美女www| 热久久99这里有精品| 精品久久久久人成| 精品国产乱码久久久久酒店| 欧美性xxxx18| 亚洲片国产一区一级在线观看| 欧美国产精品va在线观看| 欧美一级高清免费| 欧美亚洲在线观看| 久久久久久国产精品| 亚洲国产另类 国产精品国产免费| 亚洲国产精品va在线看黑人动漫| 国产裸体写真av一区二区| 搡老女人一区二区三区视频tv| 亚洲综合在线播放| 亚洲人成在线观看| 亚洲精品999| 久久亚洲国产成人| 久久在线观看视频| 久久久精品一区二区三区| 久久久999成人| 国产精品普通话| 国产精品久久久久久久9999| 亚洲电影免费观看高清完整版在线观看| 国产精品99久久久久久久久久久久| 最新国产成人av网站网址麻豆| 国外成人免费在线播放| 精品久久久久久久中文字幕| 亚洲综合成人婷婷小说| 国产成人啪精品视频免费网| 91精品国产高清自在线看超| 久久精彩免费视频| 日韩中文字幕视频|