J2ME學習筆記(1)--實現手機螢幕的切換

來源:互聯網
上載者:User
筆記 在編寫手機程式時,經常要進行各個螢幕間的切換。一開始不知道怎麼樣去做,這兩天看了一個例子,很簡單,但很能說明問題。總結一下。如有不妥之外,請高手糾正!
功能:在主程式中有多個按鈕,每一個按鈕對應一個功能,每一個功能要不同的螢幕(元素)表現出來。
實現:
一、主程式中必然定義了一個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出來了:)



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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