J2ME學習筆記(七)

來源:互聯網
上載者:User

    做手機的程式開發,肯定就會涉及到圖形處理方面的問題咯。與交易處理一樣,MIDP將圖形介面處理

也分成了進階圖形介面處理與低級圖形介面處理。同樣,進階圖形介面處理方法是可以方便移值的,但是

功能有限,低級圖形介面功能強大,但是再移值以後可能會需要更改部分代碼。進階圖形介面都需要繼承

Screen,而低級圖形介面則繼承Canvas,並大量使用Graphics所定義的圖形處理方法。MIDP所使用的圖形

介面類都屬於前面代碼中都用過的javax.microedition.lcdui這個package裡面。在同一時間(只是同一

時間)內Canvas和Scree的子類只能存在一個。
    Screen類中有四個子類,Alert,List,TextBox,Form。其中Form是屬於沒有任何使用介面的元素,

它只是一個容器,可以容納其他Item類在其中用來組合一個複雜的圖形使用介面。而其他幾個子類則屬於

封裝了預定的固定圖形介面,只能單獨的拿來使用。這個其實就和HTML裡面各種輸入框與Form之間的關係

一樣。
    呵呵,和以前學其他開發語言一樣,一個個的來測試這些子類的各種使用方法。^_^用實際第程式來

說明之間第關係和之間第區別。
    一、List
      1)Choice.IMPLICIT

package com.graph;

/**
 * @author You Li
 *
 * CopyRight (C) 2005
 */
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

public class IMPListTest extends MIDlet implements CommandListener {

 private Display display;
 public IMPListTest() {
  
  // TODO 自動產生建構函式存根
  display = Display.getDisplay(this);
 }

 protected void startApp() throws MIDletStateChangeException {
  // TODO 自動產生方法存根
  List aList = new List("ListTest",Choice.IMPLICIT) ;
  aList.append(" A ",null);
  aList.append(" B ",null);
  aList.append(" C ",null);
  aList.append(" D ",null);
  aList.setCommandListener(this);
  display.setCurrent(aList);
 }

 protected void pauseApp() {
  // TODO 自動產生方法存根

 }

 protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
  // TODO 自動產生方法存根

 }

 public void commandAction(Command command, Displayable display) {
  // TODO 自動產生方法存根
  System.out.println("Command action start ... ...");
  if(command==List.SELECT_COMMAND){
   List test= (List) display ;
   int selected = test.getSelectedIndex() ;
   System.out.println(" Item " + selected + "selected") ;
  }
 }

}

   當我們運行這個程式的時候會發現螢幕上出現4個選項,答應出選定的選項的indexid,由此可以看出

來Choice.IMPLICIT的選項被選中,它會馬上使用setCommandListener()方法註冊內容,並同時呼叫comma

dnAction()方法。同時通過commadnAction()方法的第一個參數判斷是否使用的是Choice.IMPLICIT選項。

   2)Choice.EXCLUSIVE

package com.graph;

/**
 * @author You Li
 *
 * CopyRight (C) 2005
 */
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class EXCListTest extends MIDlet implements CommandListener {

 private Display display;
 Command commit ;
 public EXCListTest() {
  // TODO 自動產生建構函式存根
  display = Display.getDisplay(this);
 }

 protected void startApp() throws MIDletStateChangeException {
  // TODO 自動產生方法存根
  commit = new Command("提交",Command.SCREEN,1) ;
  List alist = new List("ListTest",Choice.EXCLUSIVE) ;
  alist.append(" A ",null) ;
  alist.append(" B ",null) ;
  alist.append(" C ",null) ;
  alist.addCommand(commit) ;
  alist.setCommandListener(this) ;
  display.setCurrent(alist) ;
 }

 protected void pauseApp() {
  // TODO 自動產生方法存根

 }

 protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
  // TODO 自動產生方法存根

 }

 public void commandAction(Command command, Displayable display) {
  // TODO 自動產生方法存根
  System.out.println("Commadn action start... ...");
  if(command == commit){
   List tmp = (List) display ;
   int selected = tmp.getSelectedIndex() ;
   System.out.println("Item " + selected + "selected") ;
  }
 }
}

    運行這個程式我們會發現Choice.EXCLUSIVE和Choice.IMPLICIT之間第區別了。Choice.EXCLUSIVE不

會在我們選擇以後馬上運行commandAction()方法,我們只能commit的系統選項菜單來完成最後第提交。

當我們點擊系統功能表的commit以後會執行commandAction()方法。

 3)、Choice.MULTIPLE

/**
 * @author You Li
 *
 * CopyRight (C) 2005
 */
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class MULTListTest extends MIDlet implements CommandListener {

 private Display display;
 Command commit;
 
 public MULTListTest() {
  display = Display.getDisplay(this);
 }

 protected void startApp() throws MIDletStateChangeException {
  // TODO 自動產生方法存根
  commit = new Command("提交",Command.SCREEN,1);
  List alist = new List("ListTest",Choice.MULTIPLE);
  alist.append(" A ",null) ;
  alist.append(" B ",null) ;
  alist.append(" C ",null) ;
  alist.addCommand(commit);
  alist.setCommandListener(this);
  display.setCurrent(alist);
 }

 protected void pauseApp() {
  // TODO 自動產生方法存根

 }

 protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
  // TODO 自動產生方法存根

 }

 public void commandAction(Command command, Displayable display) {
  // TODO 自動產生方法存根
  System.out.println("Commadn action start... ...");
  if(command == commit){
   List tmp = (List) display;
   int num = tmp.size();
   for(int i = 0;i< num;i++){
    if(tmp.isSelected(i)){
     System.out.println("Item " + i + "selected");
    }
   }
  }
 }

}

   這個程式裡面我們使用了Choice.MULTIPLE,也就是多選框的使用。和Choice.EXCLUSIVE一樣,只有當

我們使用系統功能表commit以後才會調用commandAction()方法,來進行操作。

    二、Alert和AlertType
    windows,還有一般頁面上的對話方塊見多了,這個Alert其實也就是這個作用。它屬於Screen的子類,

我們可以用Display累的setCurrent()方法將它顯示在螢幕上,當然,當Alert設定喂螢幕畫面的時候系統

本身一定要存在一個畫面,不然Alert無法跳回,會拋出一個錯誤出來。如果我們喂Alert對象設定其Aler

tType的屬性AlertType.ALARM,Alert.FOREVER以後那麼需要我們點擊系統確認鍵才會從Alert視窗返回原

始視窗。一個簡單的例子如下:
    只有當顯示“視窗”的時候設定了AlertType.ALARM,Alert.FOREVER屬性,所以需要點擊“done”以

後Alert對象才會關閉。

package com.graph;

/**
 * @author You Li
 *
 * CopyRight (C) 2005 www.iguess.com.cn 
 */
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class AlertTest extends MIDlet implements CommandListener{

 private Display display;
 Command commit;
 
 public AlertTest() {
  display = Display.getDisplay(this);
 }

 protected void startApp() throws MIDletStateChangeException {
  // TODO 自動產生方法存根
  List aList = new List("ListTest",Choice.IMPLICIT) ;
  aList.append(" 視窗 ",null) ;
  aList.append(" 確認 ",null) ;
  aList.append(" 錯誤 ",null) ;
  aList.append(" 資訊 ",null) ;
  aList.append(" 警告 ",null) ;
  aList.setCommandListener(this) ;
  display.setCurrent(aList) ;
 }

 protected void pauseApp() {
  // TODO 自動產生方法存根

 }

 protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
  // TODO 自動產生方法存根

 }
 public void commandAction(Command command,Displayable dis){
  if(command == List.SELECT_COMMAND){
   Alert alert = new Alert("視窗測試") ;
   List temp = (List) dis ;
   switch(temp.getSelectedIndex()){
    case 0 :
     alert.setType(AlertType.ALARM) ;
     alert.setString(" 視窗 ") ;
     alert.setTimeout(Alert.FOREVER) ;
     display.setCurrent(alert) ;
     break ;
    case 1 :
     alert.setType(AlertType.CONFIRMATION) ;
     alert.setString(" 確認 ") ;
     display.setCurrent(alert) ;
     break ;
    case 2 :
     alert.setType(AlertType.ERROR) ;
     alert.setString( "錯誤 ") ;
     display.setCurrent(alert) ;
     break ;
    case 3 :
     alert.setType(AlertType.INFO) ;
     alert.setString(" 資訊 ") ;
     display.setCurrent(alert) ;
     break ;
    case 4 :
     alert.setType(AlertType.WARNING) ;
     alert.setString(" 警告 ") ;
     display.setCurrent(alert) ;
     break ;
   }
  }
 }
}

   11:30。。。準時上床看電視了。。呵呵,今天從早上8:00一直到現在除了吃飯其他時間都在電腦前

面。。感覺眼睛都痛了。。唉。。。工作是給老闆做的,錢賺來還要還給國家,還就是身體才是自己的。

。程式員。。就tmd命苦亞。。。。休息去也。。學習是學不完的。。。

============================================
   還是希望大家多多留言,多多討論,思想的碰撞才能有火花呀。還有,me的基礎知識快要學完了,准

備搞幾個小遊戲練手。。如果那位兄台有意一起練手請給我發郵件。sinoly@gmail.com

,告訴我你們的msn,我來加^_^。。。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.