程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> J2ME學習筆記--實現手機屏幕的切換

J2ME學習筆記--實現手機屏幕的切換

編輯:J2ME

在編寫手機程序時,經常要進行各個屏幕間的切換。一開始不知道怎麼樣去做,這兩天看了一個例子,很簡單,但很能說明問題。總結一下。如有不妥之外,請高手糾正!
功能:在主程序中有多個按鈕,每一個按鈕對應一個功能,每一個功能要不同的屏幕(元素)表現出來。
實現:
一、主程序中必然定義了一個Display對像,如private Display display,它表示當前的屏幕。還有一些Displayable對像。如Form,TextFIEld等都是Displayable的子類。在主程序中通過dipslay.serCurrent(Displayable實例名); 即可將當Displayable實例加入當前的屏幕。以下程序:
private Display display;
private Form form = new Form(“一個Form“);
public void startApp()
{
        display.setCurrent(form);
}
作用是將form添加到當前的屏幕當中。
二、要想進行屏幕間的切換,只要將你想顯示的東東放到到主程序的display對象中即可。主程序中定義了一個display,則要在另一個屏幕(我姑且把它稱之為目標屏幕)中引用到主程序的display。

開發環境:Win2000 server+Eclipse+WTK2.1

用以下代碼說明:

MainMIDlet.Java:主程序,一個標准的MIDlet。

import Javax.microedition.midlet.MIDlet;
import Javax.microedition.lcdui.*;

public class MainMIDlet extends MIDlet implements CommandListener {

private Display display;
private Form form = new Form("Wellcome!!");
private Command okCommand = new Command("OK",Command.OK,1);//選擇OK,換到下一個屏幕
private Form ns ;
private StringItem si = new StringItem("First Screen","~_~");
public MainMIDlet()
{
          form.addCommand(okCommand);
          form.append(si);
 }
public  void startApp() {
        display = Display.getDisplay(this);
       
        display.setCurrent(form);
        form.setCommandListener(this);//對form加入CommandListener

 }
 public  void pauseApp() {

 }
 public void destroyApp(boolean b){

 }
 public void commandAction(Command c,Displayable s)
 {
          if(c==okCommand)
          {
           ns = new NextScreen(display,form);//最關鍵的地方在這裡:)
           display.setCurrent(ns);

          }
  
 }

}
在這個MIDlet中,定義了一個Display對像display。
以及一個兩個Displayable對象Form form及StringItem si。運行後顯示在屏幕當中。
還有個一Command okCommand,其作用是觸發下一個屏幕。
在public void commandListener中可以看到,當當前按下的按鈕是okCommand時,初始化一個NextScreen對象
ns = new NextScreen(display,form);
將display和form傳入,作用就是進行屏幕的切換。
下面是NextScreen的實現:
NextScreen.Java 第二個屏幕的代碼
import Javax.microedition.lcdui.*;
public class NextScreen extends Form implements CommandListener {
 
 private Display display;
 private Displayable parent;
 private Command backCommand = new Command("BACK",Command.BACK,1);
 private StringItem si = new StringItem("SecondScrean","~_~");
 public NextScreen(Display d,Displayable p)
 {
          super("nextscreen");
          display = d;
          parent = p;
          append(si);
          addCommand(backCommand);
          setCommandListener(this);
  
 }
 public void commandAction(Command c,Displayable s)
 {
            //返回上一個屏幕
          if(c==backCommand)
          {
           display.setCurrent(parent);
          }
 }

}
它繼承自Form類。
在NextScreen中又定義了一個Display display,將用它來標識當前的元素顯示在哪一個屏幕中。
一個Form form,一個StringItem si。這是當前屏幕中要顯示的東東:)
構造函數中的super("secondscreen");的作用是使得NextScreen可以直接調中其父類Form中的函數。
backCommand的作用是返回上一個屏幕。
將form,si及backCommand加入NextScreen中,一個NextScreen的實例就完成了。在主程序(MainMIDlet)中,就是ns。

接下來,最關鍵的地方,就是在MainMIDlet中的這一句:display.setCurrent(ns);
就是把ns在當前的屏幕中顯示出來!這樣就可以看到NextScreen中定義的各個元素(form,si)了!


然後想返回原屏幕,怎麼辦呢?這時NextScreen中的backCommand就起作用了。
仔細看這兩句:
在MainMIDlet.Java中:
ns = new NextScreen(display,form);
它將form也傳了進去。它有什麼用呢?
在NextScreen的構造函數中:
dispaly =d;
 這一句其實等於:NextScreen.display = MainMIDlet.display;
這樣,NextScreen就得到了當前的屏幕,它就隨意的在上面放東東了。
parent = p;
這一句其實等於:NextScreen.parent = MainMIDlet.form;
從字面意思不難理解,原來是把主程序的form當成parent(父母),這樣就得到當前屏幕的前一個屏幕中所顯示的內容!!
然後在commandAction中,如果backCommand按下了,則執行display.serCurrent(parent);這樣,又把原來的屏幕給show出來了:)

運行結果:

MainMIDlet.Java

NextScreen.Java

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved