MIDlet 持有唯一 Display 物件,代表當前螢幕。切換畫面即呼叫 display.setCurrent(Displayable)。若在另一個類別(如自訂 Form)需切換回上一畫面,必須持有對主 MIDlet 的 Display 及前一 Displayable 的參考。
public class MainMIDlet extends MIDlet implements CommandListener {
private Display display;
private Form mainForm = new Form("Welcome!!");
private Command okCmd = new Command("OK", Command.OK, 1);
private StringItem item = new StringItem("First Screen", "~_~");
private Form nextScreen; // 參考下一畫面
public MainMIDlet() {
mainForm.append(item);
mainForm.addCommand(okCmd);
}
public void startApp() {
display = Display.getDisplay(this);
display.setCurrent(mainForm);
mainForm.setCommandListener(this);
}
public void commandAction(Command c, Displayable d) {
if (c == okCmd) {
nextScreen = new NextScreen(display, mainForm); // 傳遞 display 與父畫面
display.setCurrent(nextScreen);
}
}
public void pauseApp() {}
public void destroyApp(boolean b) {}
}
public class NextScreen extends Form implements CommandListener {
private Display display;
private Displayable parent; // 上一畫面
private Command backCmd = new Command("BACK", Command.BACK, 1);
private StringItem item = new StringItem("SecondScreen", "~_~");
public NextScreen(Display d, Displayable p) {
super("NextScreen");
display = d;
parent = p;
append(item);
addCommand(backCmd);
setCommandListener(this);
}
public void commandAction(Command c, Displayable d) {
if (c == backCmd) display.setCurrent(parent); // 返回上一畫面
}
}
NextScreen 建構子接收 Display 與 Displayable parent,分別對應「當前顯示管理者」與「要返回的畫面」。display.setCurrent(nextScreen) 完成切換。display.setCurrent(parent),無需重建主畫面,保留狀態。