程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> J2ME學習札記2

J2ME學習札記2

編輯:JAVA編程入門知識

  Command對象
  發信站: 北大未名站 (2001年10月20日20:33:56 星期六) , 站內信件
   在前面我們其實已經使用過Command對象了。J2ME的事件系統比較非凡,你必須首先定義一系列的命令,然後注冊到容器對象中,例如(Form、Alert、List、TextBox),再設定命令監聽者
  ,編寫好commandAction()方法即可。當系統發送某個命令,便由commandAction()方法進行統籌處理。下面的程序演示了如何定義多個命令以及如何編寫commandAction()方法。
  package fancy.test;
  
  import Javax.microedition.midlet.*;
  import javax.microedition.lcdui.*;
  
  public class CMD extends MIDlet implements CommandListener
  {
  private Display display;
   private Form props;
  
   private Command backCommand = new Command("BACK", Command.BACK, 2);
   private Command cancelCommand = new Command("CANCEL", Command.CANCEL, 1);
   private Command exitCommand = new Command("EXIT", Command.EXIT, 1);
   private Command helpCommand = new Command("HELP", Command.HELP, 1);
   private Command itemCommand = new Command("ITEM", Command.ITEM, 1);
   private Command okCommand = new Command("OK", Command.OK, 1);
   private Command screenCommand = new Command("SCREEN", Command.SCREEN, 1);
   private Command stopCommand = new Command("STOP", Command.STOP, 1);
  
  
  public CMD()
  {
  display = Display.getDisplay(this);
   }
  
  public void startApp()
  {
  props = new Form("Hello World");
  props.append("Hello World! ");
  
  props.addCommand(backCommand);
  props.addCommand(cancelCommand);
  props.addCommand(exitCommand);
  props.addCommand(helpCommand);
  props.addCommand(itemCommand);
  props.addCommand(okCommand);
  props.addCommand(screenCommand);
  props.addCommand(stopCommand);
  props.setCommandListener(this);
  display.setCurrent(props);
   }
  
  public void showScreen(String cmd)
  {
  Form form=new Form("show cmd");
  form.append(cmd);
  form.addCommand(exitCommand);
  form.setCommandListener(this);
  display.setCurrent(form);
  
  }
  
  public void commandAction(Command c, Displayable s)
  {
  if (c == exitCommand)
  {
  destroyApp(false);
   notifyDestroyed();
  }
  else if(c==helpCommand)
  {
  showScreen("help");
  }
  else if(c==backCommand)
  {
  showScreen("back");
  }
  else if(c==cancelCommand)
  {
  showScreen("cancel");
  }
  else if(c==itemCommand)
  {
  showScreen("item");
  }
  else if(c==okCommand)
  {
  showScreen("ok");
  }
  else if(c==screenCommand)
  {
  showScreen("screen");
  }
  if(c==stopCommand)
  {
  showScreen("stop");
  }
  
  
   }
  
  public void destroyApp(boolean unconditional)
  {
   }
  
  public void pauseApp()
  {
  display.setCurrent(null);
  props = null;
   }
  
  }
   在上面的程序(CMD.java)中定義了八個命令。假如commandAction()方法接到這八個命令,多半是調用showScreen()方法,將這幾個命令輸出。showScreen()方法會產生一個新的容器對象(Form),作為當前的屏幕,並把截獲的命令顯示在屏幕中。
   CMD.java的運行效果如下2圖所示(當屏幕出現Hello World字樣的時候,你需要按下退出鍵,命令菜單就會出現了,你可以依次執行各個命令)。
  
  
  TextBox文本框對象
  發信站: 北大未名站 (2001年10月20日20:36:34 星期六) , 站內信件
  
   TextBox是一個容器類型的對象(和Form的性質一樣)。用法如下所示:
  
  package fancy.test;
  
  import javax.microedition.midlet.*;
  import javax.microedition.lcdui.*;
  
  public class ShowTextBox extends MIDlet implements CommandListener
  {
  private Display display;
   private TextBox txtBox;
  
  private Command exitCommand = new Command("Exit", Command.EXIT, 1);
  
  public ShowTextBox()
  {
  display = Display.getDisplay(this);
   }
  
  public void startApp()
  {
  //or :
  //String str="hello world";
  //txtBox = new TextBox("Text Box",str,str.length(),0);
  //the follow code is wrong:
  //txtBox = new TextBox("Text Box",str,any number here,0);
  
  txtBox = new TextBox("Text Box",null,200,0);
  
  txtBox.addCommand(exitCommand);
  txtBox.setCommandListener(this);
  display.setCurrent(txtBox);
   }
  
  public void commandAction(Command c, Displayable s)
  {
  if (c == exitCommand)
  {
  destroyApp(false);
   notifyDestroyed();
  }
   }
  
  public void destroyApp(boolean unconditional)
  {
   }
  
  public void pauseApp()
  {
  display.setCurrent(null);
  txtBox = null;
   }
  
  }
   請注重TextBox類的構造函數,第一個參數實際上是窗口的名稱(因為TextBox是一個容器,可能是當前屏幕的顯示對象),第二個參數是缺省值,第三個參數是輸入字符的總長度。假如你設置了文本框的缺省值,那麼第三個參數必須是缺省字符的長度。假如第三個參數的值和缺省字符的長度不一樣,那麼程序運行不成功(編譯可以通過)。假如你將第二個參數置為null值,那麼第三個參數可以任意設。
   ShowTextBox.java的運行效果如下圖所示:
  
  TextField文本域對象
  發信站: 北大未名站 (2001年10月20日20:37:59 星期六) , 站內信件
  
   TextField和TextBox有點相似,不過TextBox是多行的,而TextField是單行的。而且TextBox是容器類型的對象,但是TextField是項目類型的對象,只能夠被容器包含,不能夠單獨顯示。
  TextField文本域對象的用法如下所示:
  package fancy.test;
  
  import javax.microedition.midlet.*;
  import javax.microedition.lcdui.*;
  
  public class ShowTextField extends MIDlet implements CommandListener
  {
  private Display display;
  private Form props;
   private TextField txtField;
  
  private Command exitCommand = new Command("Exit", Command.EXIT, 1);
  
  public ShowTextField()
  {
  display = Display.getDisplay(this);
   }
  
  public void startApp()
  {
  props = new Form("Hello World");
  props.append("Hello World! ");
  txtField=new TextField("EMail:", "", 15,TextField.EMAILADDR);
  props.append(txtField);
  props.addCommand(exitCommand);
  props.setCommandListener(this);
  display.setCurrent(props);
   }
  
  public void commandAction(Command c, Displayable s)
  {
  if (c == exitCommand)
  {
  destroyApp(false);
   notifyDestroyed();
  }
   }
  
  public void destroyApp(boolean unconditional)
  {
   }
  
  public void pauseApp()
  {
  display.setCurrent(null);
  props = null;
   }
  
  }
   請注重startApp()方法,我們使用Form對象作為當前屏幕的顯示對象,而將TextField對象作為Form的一個子項目顯示。下面來介紹TextField類的構造函數,第一個參數是文本域的名稱,第二個參數是缺省值,第三個參數是長度,第四個參數是文本域的類型,可選的值有: TextFi
  eld.PASSWord、TextField.EMAILADDR、TextField.PHONENUMBER、TextField. URL、TextFi
  eld. NUMERIC等等。構造好TextField對象之後,調用Form的append()方法將它添加到Form對
  象的子項目中。ShowTextField.java程序的運行效果如下圖所示:
  
  DateField對象
  發信站: 北大未名站 (2001年10月20日20:39:14 星期六) , 站內信件
  
   DateField對象和TextField對象一樣同屬於項目類型的對象,不能夠單獨顯示,必須作為容器對象的子項目顯示。DateField對象的作用是顯示一個日期,它和Windows控制面板中的時間和日期設置程序有點近似。DateField對象的用法如下所示:
  package fancy.test;
  
  import javax.microedition.midlet.*;
  import javax.microeditio
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved