溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

JavaMe中怎么使用TextEdit繪制文本框

發(fā)布時間:2021-07-01 17:19:15 來源:億速云 閱讀:177 作者:Leah 欄目:編程語言

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)JavaMe中怎么使用TextEdit繪制文本框,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

1 運(yùn)用Graphics、GameCanvas繪制文本框和光標(biāo)。

2 檢測到輸入事件時,跳轉(zhuǎn)到 高級界面->TextBox 。通過系統(tǒng)調(diào)用輸入法完成輸入。

3 將TextBox輸入的值返回給TextEdit對象。

【設(shè)計(jì)模式】

這個過程有點(diǎn)類似裝飾模式,實(shí)際上,實(shí)現(xiàn)輸入的還是TextBox,只是給TextBox裝飾了一下,形成了一個漂亮的外觀。

【代碼清單】

TextEdit.java

package com.token.view.components;   import javax.microedition.lcdui.Font;  import javax.microedition.lcdui.Graphics;  import javax.microedition.lcdui.game.GameCanvas;   public class TextEdit extends GameCanvas  {      private Font ft;            public int width;      public int height;            public TextEdit(GameCanvas canvas)       {          super(false);                }            //繪制文本框      public void drawTextBox(GameCanvas canvas, Graphics graphics, String text, int x, int y, boolean cursorBlinkOn)      {          //System.out.println("draw");          int padding = 4;          int margin = 2;                    ft = Font.getFont(Font.FACE_PROPORTIONAL,Font.STYLE_PLAIN,Font.SIZE_MEDIUM);          graphics.setFont(ft);                    width = 3*canvas.getWidth()/5+2*padding;          height = ft.getHeight()+2*padding;           graphics.setColor(Color.frame);          graphics.fillRect(x+1,y+1,width+margin,height+margin);                    graphics.setColor(Color.frameBg);          graphics.drawRect(x, y,width, height);          graphics.setColor(Color.background);          graphics.fillRect(x+1, y+1,width-1,height-1);                    graphics.setColor(Color.text);          graphics.drawString(text, x+padding, y+padding, Graphics.TOP|Graphics.LEFT);                    drawCursor(graphics, x+ft.stringWidth(text)+padding, y+padding, 1, ft.getHeight(), cursorBlinkOn);                    canvas.flushGraphics(x,y,width,height);      }        //繪制光標(biāo)      public void drawCursor(Graphics graphics, int x, int y, int width, int height, boolean cursorBlinkOn)      {          if(cursorBlinkOn)          {              ft = Font.getFont(Font.FACE_PROPORTIONAL,Font.STYLE_PLAIN,Font.SIZE_MEDIUM);              graphics.setFont(ft);              graphics.setColor(0x0,0x0,0x0);              graphics.drawLine(x+width,y,x+width,y+height);          }      }  }

PopUpTextBox.java

package com.token.view;   import javax.microedition.lcdui.Command;  import javax.microedition.lcdui.CommandListener;  import javax.microedition.lcdui.Displayable;  import javax.microedition.lcdui.TextBox;   import com.token.util.UIController;   public class PopUpTextBox extends TextBox {         private UIController controller;        protected String canvasText = "";        private Command okCommand;        private Command cancelCommand;        private String object_name = null;        private String editor = null;        private Object args_t[];        private Object[] args;                      public PopUpTextBox(UIController control, String title, String text, int maxsize, int constraints)         {            super(title, text, maxsize, constraints);            controller = control;                        args = new Object[6];                        okCommand = new Command("確定", Command.OK, 1);            cancelCommand = new Command("取消", Command.CANCEL, 1);                        this.addCommand(okCommand);            this.addCommand(cancelCommand);            this.setCommandListener(new TextBoxListener());        }                public void init(Object[] args)        {            object_name = ((String)args[0]!=null)?(String)args[0]:"";            editor = ((String)args[1]!=null)?(String)args[1]:"";            //System.out.println(object_name);            //System.out.println(editor);            args_t = args;            this.setString("");        }                    protected void closeTextBox(boolean update) {              if (update) canvasText = this.getString();              //System.out.println(canvasText);               if(object_name.equals("registScreen"))              {                  if(editor.equals("regist_name"))                  {                      if(args_t[3]!=""||args_t[3]!=null||args_t[4]!=""||args_t[4]!=null)                      {                          args[0] = object_name;                          args[1] = editor;                          args[2] = this.canvasText;                          args[3] = args_t[3];                          args[4] = args_t[4];                      }                      controller.handleEvent(UIController.EventID.EVENT_USER_REGIST_EDIT_BACK,args);                  }                  else if(editor.equals("regist_passwd"))                  {                      if(args_t[2]!=""||args_t[2]!=null||args_t[4]!=""||args_t[4]!=null)                      {                          args[0] = object_name;                          args[1] = editor;                          args[2] = args_t[2];                          args[3] = this.canvasText;                          args[4] = args_t[4];                      }                      controller.handleEvent(UIController.EventID.EVENT_USER_REGIST_EDIT_BACK,args);                  }                  else if(editor.equals("regist_passwd_re"))                  {                      if(args_t[2]!=""||args_t[2]!=null||args_t[3]!=""||args_t[3]!=null)                      {                          args[0] = object_name;                          args[1] = editor;                          args[2] = args_t[2];                          args[3] = args_t[3];                          args[4] = this.canvasText;                      }                      controller.handleEvent(UIController.EventID.EVENT_USER_REGIST_EDIT_BACK,args);                  }              }                           //...      }               private class TextBoxListener implements CommandListener       {           public void commandAction(Command command, Displayable disp)          {              if(command==okCommand)              {                  closeTextBox(true);              }              else if(command==cancelCommand)              {                  closeTextBox(false);              }          }      }  }

UserRegist.java

package com.token.view;   import javax.microedition.lcdui.Font;  import javax.microedition.lcdui.Graphics;  import javax.microedition.lcdui.game.GameCanvas;  import com.token.model.*;  import com.token.util.*;  import com.token.view.components.*;   public class UserRegist extends GameCanvas implements Runnable {       private UIController controller;      private Graphics graphics;            private Font ft;            private Menu menu;      private Head head;      private BackGroud backGroud;            private UserDataRecord userRecord;       private String title;            private TextEdit textEdit_name;      private TextEdit textEdit_passwd;      private TextEdit textEdit_passwd_re;      private int textEdit_name_x;      private int textEdit_name_y;      private int textEdit_passwd_x;      private int textEdit_passwd_y;      private int textEdit_passwd_re_x;      private int textEdit_passwd_re_y;      private int currentlySelectedIndex = 0;            private String username;      private String passwd;      private String passwd_re;            long caretBlinkDelay = 500L;      long lastCaretBlink = 0;      private String object_name;      private String editor;      private boolean cursorBlinkOn1;      private boolean cursorBlinkOn2;      private boolean cursorBlinkOn3;            private int width;      private int height;            public UserRegist(UIController control)       {          super(false);          this.controller=control;          this.title = "用戶注冊";          setFullScreenMode(true);          graphics = getGraphics();                    width = getWidth();          height = getHeight();                    menu = new Menu(this);          head = new Head(this);          backGroud = new BackGroud(this);                    userRecord = new UserDataRecord();                    textEdit_name = new TextEdit(this);          textEdit_passwd = new TextEdit(this);          textEdit_passwd_re = new TextEdit(this);      }       public void show(Object[] args) {          // TODO Auto-generated method stub          setFullScreenMode(true);                    object_name = ((String)args[0]!=null)?(String)args[0]:"";          editor = ((String)args[1]!=null)?(String)args[1]:"";          username = ((String)args[2]!=null)?(String)args[2]:"";          passwd = ((String)args[3]!=null)?(String)args[3]:"";          passwd_re = ((String)args[4]!=null)?(String)args[4]:"";                    if(editor.equals("regist_name"))          {              cursorBlinkOn1 = true;              cursorBlinkOn2 = false;              cursorBlinkOn3 = false;              currentlySelectedIndex =0;          }          else if(editor.equals("regist_passwd"))          {              cursorBlinkOn1 = false;              cursorBlinkOn2 = true;              cursorBlinkOn3 = false;              currentlySelectedIndex =1;          }          else if(editor.equals("regist_passwd_re"))          {              cursorBlinkOn1 = false;              cursorBlinkOn2 = false;              cursorBlinkOn3 = true;              currentlySelectedIndex =2;          }                    //System.out.println(object_name);          //System.out.println(editor);          draw();          redraw();      }       public void draw()      {          //clearScreen();          backGroud.drawBackGroud(this, graphics);          head.drawHead(this,graphics,this.title);          menu.drawMenu(this,graphics,"下一步","退出");          drawBody();      }       private void redraw()      {          switch(currentlySelectedIndex)          {              case 0:              {                  cursorBlinkOn2 = false;                  cursorBlinkOn3 = false;                  editor = "regist_name";                  break;              }              case 1:              {                  cursorBlinkOn1 = false;                  cursorBlinkOn3 = false;                  editor = "regist_passwd";                  break;              }              case 2:              {                  cursorBlinkOn1 = false;                  cursorBlinkOn2 = false;                  editor = "regist_passwd_re";                  break;              }              default:;          }                    textEdit_name.drawTextBox(this, graphics, username, textEdit_name_x, textEdit_name_y, cursorBlinkOn1);          textEdit_passwd.drawTextBox(this, graphics, passwd, textEdit_passwd_x, textEdit_passwd_y, cursorBlinkOn2);          textEdit_passwd.drawTextBox(this, graphics, passwd_re, textEdit_passwd_re_x, textEdit_passwd_re_y, cursorBlinkOn3);          textEdit_name.flushGraphics();      }       public void drawBody()      {          int margin =5;          ft = Font.getFont(Font.FACE_PROPORTIONAL,Font.STYLE_BOLD,Font.SIZE_LARGE);                    String info = "用戶名:\n";          String info_wrap1[] = StringDealMethod.format(info, width-10, ft);                    graphics.setFont(ft);          graphics.setColor(Color.text);          for(int i=0; i<info_wrap1.length; i++)          {              graphics.drawString(info_wrap1[i],5, (i) * ft.getHeight()+40, Graphics.TOP|Graphics.LEFT);          }                    textEdit_name_x = 5;          textEdit_name_y = info_wrap1.length * ft.getHeight()+40;          textEdit_name.drawTextBox(this, graphics, username, textEdit_name_x, textEdit_name_y, cursorBlinkOn1);                    info = "用戶密碼:\n";          String info_wrap2[] = StringDealMethod.format(info, width-10, ft);                graphics.setFont(ft);          graphics.setColor(Color.text);          for(int i=0; i<info_wrap2.length; i++)          {              graphics.drawString(info_wrap2[i],5, (i+info_wrap1.length) * ft.getHeight()+textEdit_name.height+margin+40, Graphics.TOP|Graphics.LEFT);          }                    textEdit_passwd_x = 5;          textEdit_passwd_y = (info_wrap1.length+info_wrap2.length) * ft.getHeight()+textEdit_name.height+margin+40;          textEdit_passwd.drawTextBox(this, graphics, passwd, textEdit_passwd_x, textEdit_passwd_y, cursorBlinkOn2);                info = "密碼確認(rèn):\n";          String info_wrap3[] = StringDealMethod.format(info, width-10, ft);                graphics.setFont(ft);          graphics.setColor(Color.text);          for(int i=0; i<info_wrap3.length; i++)          {              graphics.drawString(info_wrap3[i],5, (i+info_wrap1.length+info_wrap2.length) * ft.getHeight()+textEdit_name.height+textEdit_passwd.height+2*margin+40, Graphics.TOP|Graphics.LEFT);          }                    textEdit_passwd_re_x = 5;          textEdit_passwd_re_y = (info_wrap1.length+info_wrap2.length+info_wrap3.length) * ft.getHeight()+textEdit_name.height+textEdit_passwd.height+2*margin+40;          textEdit_passwd_re.drawTextBox(this, graphics, passwd_re, textEdit_passwd_re_x, textEdit_passwd_re_y, cursorBlinkOn3);                      }       public void clearScreen()      {          graphics.setColor(0xff,0xff,0xff);          graphics.fillRect(0, 0, width, height);      }       public void checkTimeStamp()      {          long currentTime = System.currentTimeMillis();          //System.out.println("1");          if(lastCaretBlink + caretBlinkDelay < currentTime)          {              //System.out.println("2");              if(editor.equals("regist_name"))              {                  cursorBlinkOn1 =! cursorBlinkOn1;                  cursorBlinkOn2 = false;                  cursorBlinkOn3 = false;              }              else if(editor.equals("regist_passwd"))              {                  cursorBlinkOn1 = false;                  cursorBlinkOn2 =! cursorBlinkOn2;                  cursorBlinkOn3 = false;              }              else if(editor.equals("regist_passwd_re"))              {                  cursorBlinkOn1 = false;                  cursorBlinkOn2 = false;                  cursorBlinkOn3 =! cursorBlinkOn3;              }              lastCaretBlink = currentTime;          }      }       public void run()      {          //System.out.println("run");          while(true)          {              checkTimeStamp();                            redraw();              try               {                  synchronized(this)                  {                      //System.out.println("3");                      wait(50L);                  }                         }              catch(Exception e)              {                  e.printStackTrace();              }                        }      }       protected void keyPressed(int keyCode)      {          switch(keyCode)          {              case KeyID.SOFT_RIGHT:              {                  controller.handleEvent(UIController.EventID.EVENT_EXIT,null);                  break;              }              case KeyID.SOFT_LEFT:              {                  if(username!="" && passwd!=""&&passwd_re!="")                  {                      if(passwd.equals(passwd_re))                      {                                                                              userRecord.db_deleteAllRecord();                          if(userRecord.db_getRecord(1)==null)                          {                              UserDataItem userItem = new UserDataItem(1,(username+","+passwd).getBytes());                              userRecord.db_addRecord(userItem);                              userItem = null;                              System.gc();                          }                                                    String update = "start";                          Object [] args = {"activeScreen", null, update};                          controller.handleEvent(UIController.EventID.EVENT_NEXT_ACTIVE_TOKEN_SCREEN,args);                      }                  }                  break;              }              case KeyID.KEY_EDIT:              case KEY_NUM0:              case KEY_NUM1:              case KEY_NUM2:              case KEY_NUM3:              case KEY_NUM4:              case KEY_NUM5:              case KEY_NUM6:              case KEY_NUM7:              case KEY_NUM8:              case KEY_NUM9:              {                  //System.out.println(editor);                  Object[] args = {object_name,editor,username,passwd,passwd_re};                  controller.handleEvent(UIController.EventID.EVENT_USER_REGIST_EDIT,args);                  break;              }              default:;          }                        keyCode = getGameAction(keyCode);          switch(keyCode)          {              case UP:              case LEFT:              {                  currentlySelectedIndex--;                  if(currentlySelectedIndex<0)                  {                      currentlySelectedIndex=0;                  }                  else                 {                      redraw();                  }                  break;              }              case DOWN:              case RIGHT:              {                  currentlySelectedIndex++;                  if(currentlySelectedIndex>2)                  {                      currentlySelectedIndex=2;                  }                  else                 {                      redraw();                  }                                    break;              }          }      }   }

【分析】

1 文本框的繪制(TextEdit.java)

需要傳遞GameCanvas、Graphics對象,實(shí)現(xiàn)繪圖,策略是誰使用,誰傳遞該參數(shù)。此外需要床底文本框左上角坐標(biāo)(x,y)以及控制光標(biāo)閃爍的變量cursorBlinkOn。

public void drawTextBox(GameCanvas canvas, Graphics graphics, String text, int x, int y, boolean cursorBlinkOn)  {      //System.out.println("draw");      int padding = 4;      int margin = 2;            ft = Font.getFont(Font.FACE_PROPORTIONAL,Font.STYLE_PLAIN,Font.SIZE_MEDIUM);      graphics.setFont(ft);            width = 3*canvas.getWidth()/5+2*padding;      height = ft.getHeight()+2*padding;       graphics.setColor(Color.frame);      graphics.fillRect(x+1,y+1,width+margin,height+margin);                graphics.setColor(Color.frameBg);      graphics.drawRect(x, y,width, height);      graphics.setColor(Color.background);      graphics.fillRect(x+1, y+1,width-1,height-1);                graphics.setColor(Color.text);      graphics.drawString(text, x+padding, y+padding, Graphics.TOP|Graphics.LEFT);                drawCursor(graphics, x+ft.stringWidth(text)+padding, y+padding, 1, ft.getHeight(), cursorBlinkOn);                canvas.flushGraphics(x,y,width,height);  }

2 繪制光標(biāo)(TextEdit.java)

public void drawCursor(Graphics graphics, int x, int y, int width, int height, boolean cursorBlinkOn)  {      if(cursorBlinkOn)      {          ft = Font.getFont(Font.FACE_PROPORTIONAL,Font.STYLE_PLAIN,Font.SIZE_MEDIUM);          graphics.setFont(ft);          graphics.setColor(0x0,0x0,0x0);          graphics.drawLine(x+width,y,x+width,y+height);      }  }

3 實(shí)現(xiàn)光標(biāo)閃爍

光標(biāo)閃爍的實(shí)現(xiàn)需要用到線程,在UIController.java類中,需要繪制文本框的視圖類,需要實(shí)現(xiàn)線程接口。

UIController.java

case EventID.EVENT_NEXT_USER_REGIST_SCREEN:  case EventID.EVENT_USER_REGIST_EDIT_BACK:  {              reg.show(args);              Thread thread = new Thread(reg);              thread.start();              midlet.setCurrent(reg);              break;  }

UserRegist.java

public void checkTimeStamp()  {      long currentTime = System.currentTimeMillis();      //System.out.println("1");      if(lastCaretBlink + caretBlinkDelay < currentTime)      {          //System.out.println("2");          if(editor.equals("regist_name"))          {              cursorBlinkOn1 =! cursorBlinkOn1;              cursorBlinkOn2 = false;              cursorBlinkOn3 = false;          }          else if(editor.equals("regist_passwd"))          {              cursorBlinkOn1 = false;              cursorBlinkOn2 =! cursorBlinkOn2;              cursorBlinkOn3 = false;          }          else if(editor.equals("regist_passwd_re"))          {              cursorBlinkOn1 = false;              cursorBlinkOn2 = false;              cursorBlinkOn3 =! cursorBlinkOn3;          }          lastCaretBlink = currentTime;      }  }   public void run()  {      //System.out.println("run");      while(true)      {          checkTimeStamp();                    redraw();          try           {              synchronized(this)              {                  //System.out.println("3");                  wait(50L);              }                     }          catch(Exception e)          {              e.printStackTrace();          }                    }  }

4 調(diào)用高級界面TextBox子類PopUpTextBox

調(diào)用時,將調(diào)用對象名、編輯對象名、以及編輯框參數(shù)傳遞給PopUpTextBox對象(一定要有,目的是保存編輯框的值,否則多次調(diào)用返回時,不同編輯框的值被刷新為空了)

UserRegist.java(KeyPressed)

case KeyID.KEY_EDIT:  case KEY_NUM0:  case KEY_NUM1:  case KEY_NUM2:  case KEY_NUM3:  case KEY_NUM4:  case KEY_NUM5:  case KEY_NUM6:  case KEY_NUM7:  case KEY_NUM8:  case KEY_NUM9:  {      //System.out.println(editor);      Object[] args = {object_name,editor,username,passwd,passwd_re};      controller.handleEvent(UIController.EventID.EVENT_USER_REGIST_EDIT,args);      break;  }

UIController.java

case EventID.EVENT_USER_REGIST_EDIT:  {       textBox.init(args);           midlet.setCurrent(textBox);       break;  }

5 PopUpTextBox參數(shù)的接收

public void init(Object[] args)  {       object_name = ((String)args[0]!=null)?(String)args[0]:"";       editor = ((String)args[1]!=null)?(String)args[1]:"";       //System.out.println(object_name);       //System.out.println(editor);       args_t = args;       this.setString("");  }

6 PopUpTextBox返回輸入法輸入的值

if (update) canvasText = this.getString();

7 PopUpTextBox輸入值處理

依據(jù)調(diào)用的對象,以及編輯對象,對輸入的值進(jìn)行處理,傳遞給父對象編輯框

if(object_name.equals("registScreen"))  {          if(editor.equals("regist_name"))          {                  if(args_t[3]!=""||args_t[3]!=null||args_t[4]!=""||args_t[4]!=null)                  {                      args[0] = object_name;                      args[1] = editor;                      args[2] = this.canvasText;                      args[3] = args_t[3];                      args[4] = args_t[4];                  }                  controller.handleEvent(UIController.EventID.EVENT_USER_REGIST_EDIT_BACK,args);      }      else if(editor.equals("regist_passwd"))      {                  if(args_t[2]!=""||args_t[2]!=null||args_t[4]!=""||args_t[4]!=null)                  {                      args[0] = object_name;                      args[1] = editor;                      args[2] = args_t[2];                      args[3] = this.canvasText;                      args[4] = args_t[4];                  }                  controller.handleEvent(UIController.EventID.EVENT_USER_REGIST_EDIT_BACK,args);      }      else if(editor.equals("regist_passwd_re"))      {                  if(args_t[2]!=""||args_t[2]!=null||args_t[3]!=""||args_t[3]!=null)                  {                      args[0] = object_name;                      args[1] = editor;                      args[2] = args_t[2];                      args[3] = args_t[3];                      args[4] = this.canvasText;                  }                  controller.handleEvent(UIController.EventID.EVENT_USER_REGIST_EDIT_BACK,args);      }  }

8 輸入值的顯示

(1) 新建對象

private TextEdit textEdit_name;  textEdit_name = new TextEdit(this);

(2) 接受輸入的參數(shù)

object_name = ((String)args[0]!=null)?(String)args[0]:"";  editor = ((String)args[1]!=null)?(String)args[1]:"";  username = ((String)args[2]!=null)?(String)args[2]:"";  passwd = ((String)args[3]!=null)?(String)args[3]:"";  passwd_re = ((String)args[4]!=null)?(String)args[4]:"";

(3) 光標(biāo)控制,定位到編輯對象,控制編輯對象的光標(biāo)閃爍(run方法)

private void redraw()  {      switch(currentlySelectedIndex)      {          case 0:          {              cursorBlinkOn2 = false;              cursorBlinkOn3 = false;              editor = "regist_name";              break;          }          case 1:          {              cursorBlinkOn1 = false;              cursorBlinkOn3 = false;              editor = "regist_passwd";              break;          }          case 2:          {              cursorBlinkOn1 = false;              cursorBlinkOn2 = false;              editor = "regist_passwd_re";              break;          }          default:;      }  //...   }

(4) 編輯框的繪制

private void redraw()  {      ...           textEdit_name.drawTextBox(this, graphics, username, textEdit_name_x, textEdit_name_y, cursorBlinkOn1);      textEdit_passwd.drawTextBox(this, graphics, passwd, textEdit_passwd_x, textEdit_passwd_y, cursorBlinkOn2);      textEdit_passwd.drawTextBox(this, graphics, passwd_re, textEdit_passwd_re_x, textEdit_passwd_re_y, cursorBlinkOn3);      textEdit_name.flushGraphics();  }

上述就是小編為大家分享的JavaMe中怎么使用TextEdit繪制文本框了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI