亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

JavaMe開發繪制文本框TextEdit

2019-11-26 14:58:01
字體:
來源:轉載
供稿:網友

【問題描述】

TextEdit是采用GameCanvas繪制的文本編輯器。本文結合實例給出實現的方法。

【原理】

1 運用Graphics、GameCanvas繪制文本框和光標。

2 檢測到輸入事件時,跳轉到 高級界面->TextBox 。通過系統調用輸入法完成輸入。

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

【設計模式】

這個過程有點類似裝飾模式,實際上,實現輸入的還是TextBox,只是給TextBox裝飾了一下,形成了一個漂亮的外觀。

【代碼清單】

TextEdit.javapackage 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);   }     //繪制光標   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.javapackage 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.javapackage 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 = "密碼確認:/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對象,實現繪圖,策略是誰使用,誰傳遞該參數。此外需要床底文本框左上角坐標(x,y)以及控制光標閃爍的變量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 繪制光標(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 實現光標閃爍

光標閃爍的實現需要用到線程,在UIController.java類中,需要繪制文本框的視圖類,需要實現線程接口。

UIController.javacase 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.javapublic 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 調用高級界面TextBox子類PopUpTextBox

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

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.javacase EventID.EVENT_USER_REGIST_EDIT: {    textBox.init(args);      midlet.setCurrent(textBox);    break; } 


5 PopUpTextBox參數的接收

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輸入值處理

依據調用的對象,以及編輯對象,對輸入的值進行處理,傳遞給父對象編輯框

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) 接受輸入的參數

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) 光標控制,定位到編輯對象,控制編輯對象的光標閃爍(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(); } 

實現的效果如圖1所示:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产精彩中文乱码av| 日韩成人在线网站| 不用播放器成人网| 97久久超碰福利国产精品…| 国产美女久久久| 欧美区二区三区| 日韩av在线直播| 国精产品一区一区三区有限在线| 亚洲精品国产精品国自产在线| 69久久夜色精品国产7777| 日韩av在线一区| 97在线观看视频国产| 亚洲新中文字幕| 欧美精品一区二区三区国产精品| 欧美成人免费一级人片100| 国产免费久久av| 欧美性做爰毛片| 国产精品免费一区豆花| 国产精品欧美激情| 亚洲少妇中文在线| 国产精品wwwwww| 成人性生交大片免费观看嘿嘿视频| 中文字幕亚洲无线码a| 中文字幕亚洲字幕| 欧美激情一区二区三级高清视频| 欧美成人全部免费| 欧美午夜美女看片| 国产视频久久久久| 国产精品偷伦视频免费观看国产| 欧美激情成人在线视频| 国产成人精品久久亚洲高清不卡| 日韩欧美在线国产| 亚洲视频电影图片偷拍一区| 中文字幕日韩欧美精品在线观看| 亚洲国产91色在线| 久久久久九九九九| 91九色综合久久| 成人黄色免费网站在线观看| 日韩激情av在线免费观看| 亚洲另类xxxx| 麻豆国产va免费精品高清在线| 上原亚衣av一区二区三区| 久久成人一区二区| 日本久久久a级免费| 2024亚洲男人天堂| 成人午夜一级二级三级| 欧美日韩国产一区中文午夜| 国产成人免费av电影| 欧美激情网友自拍| 日韩精品免费视频| 日本久久中文字幕| 欧美性猛交丰臀xxxxx网站| 久久久女人电视剧免费播放下载| 亚洲欧美国产视频| 亚洲精品国产拍免费91在线| 国产98色在线| 日韩国产欧美精品一区二区三区| 亚洲精品视频久久| 精品一区电影国产| 成人在线视频网| 日本午夜人人精品| 欧美xxxwww| 欧美精品久久久久久久久| 亚洲国产精品大全| 欧美最猛性xxxx| 国产日韩中文字幕| 欧美野外猛男的大粗鳮| 8090理伦午夜在线电影| 精品香蕉在线观看视频一| 97精品视频在线观看| 国产精品日韩专区| 欧美成人精品不卡视频在线观看| 日韩美女免费观看| 久久欧美在线电影| 97精品免费视频| 26uuu亚洲伊人春色| 91精品在线国产| 亚洲在线免费观看| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲第一区中文99精品| 国产精品久久久久久亚洲调教| 欧美日韩国产精品一区| 欧美成人免费观看| 国产成人avxxxxx在线看| 欧洲精品久久久| 欧美激情免费观看| 亚洲精品久久久久久久久久久| 国产精品久久9| 日韩在线欧美在线| 国产精品偷伦视频免费观看国产| 日韩电影免费观看在线观看| 日韩在线不卡视频| 欧美极品在线播放| 国产精品毛片a∨一区二区三区|国| 亚洲黄色免费三级| 日韩精品欧美激情| 亚洲国产精品视频在线观看| 宅男66日本亚洲欧美视频| 精品视频久久久久久| 日韩视频免费在线| 日韩视频在线免费观看| 精品国产视频在线| 欧美电影免费观看高清完整| 日韩精品高清在线| 一区二区三区国产在线观看| 日韩精品有码在线观看| 欧美另类第一页| 国产999精品久久久影片官网| 精品成人在线视频| 亚洲深夜福利网站| 亚洲国产精品成人va在线观看| 成人做爰www免费看视频网站| 亚洲无线码在线一区观看| 国产97在线|亚洲| 亚洲欧美日韩图片| 午夜精品久久久久久久99热浪潮| 91免费看国产| 亚洲欧美一区二区三区四区| 538国产精品一区二区在线| 九九九热精品免费视频观看网站| 成人黄色激情网| 久久亚洲精品国产亚洲老地址| 欧美美女18p| 亚洲高清一区二| 日韩欧美中文免费| 日韩中文字幕欧美| 成人午夜激情网| 亚洲欧美制服丝袜| 久久精品最新地址| 精品久久久久久久久中文字幕| 国产成人亚洲综合91精品| 久久深夜福利免费观看| 超碰97人人做人人爱少妇| 69av视频在线播放| 日韩在线视频观看| 久久精品成人一区二区三区| 日韩精品视频中文在线观看| 国产精品久久久久久中文字| 欧美激情欧美激情在线五月| 毛片精品免费在线观看| 668精品在线视频| 欧美成年人视频网站| 91国产在线精品| 亚洲精品电影在线观看| 一区二区欧美久久| 国产精品久久国产精品99gif| 永久555www成人免费| 午夜精品久久17c| 国产精品久久久久99| 亚洲精品一区二三区不卡| 日韩中文字幕国产| 91亚洲一区精品| 国产精品91久久久久久| 成人网欧美在线视频| 欧美精品久久久久a| 国内偷自视频区视频综合| 欧美激情免费在线| 国产日韩欧美在线观看| 韩国三级电影久久久久久| 亚洲精品一区二区在线| 欧美精品videosex性欧美| 欧美日韩国产综合视频在线观看中文| 欧美洲成人男女午夜视频| 8090成年在线看片午夜|