【Description du problème】
Textedit est un éditeur de texte dessiné à l'aide de GameCanvas. Cet article combine des exemples pour fournir des méthodes de mise en œuvre.
【principe】
1 Utilisez des graphiques et des GameCanvas pour dessiner des zones de texte et des curseurs.
2 Lorsqu'un événement d'entrée est détecté, passez à l'interface avancée -> TextBox. Entrez l'entrée via la méthode d'entrée d'appel système.
3 Renvoie la valeur saisie par TextBox vers l'objet TextEdit.
【Modèle de conception】
Ce processus est un peu similaire au mode décoratif.
【Liste de code】
TextEdit.Javapackage com.token.View.Comnents; ; ) {/ /Ystem.out.println("Draw "); )); , largeur + marge, hauteur + marge); y + 1, largeur -1, hauteur-1); + ft.stringwidth (texte) + padding, y + padding, 1, ft.getheight (), cursorblinkon); , int x, int y, int, int hauteur, booléen cursorblinkon) {if (cursorblinkon) {ft = font.getfont (font.face_proportional, Font.style_plain, Font.Size_medium); .setColor (0x0,0x0, 0x0); ; Canvastext = ""; Commandement OKCommand; MaxSize, int contraintes) {super (title, text, maxSize, contraintes); "Annuler", Command.cancel, 1); String) args [0]! = Null)? (String) args [0]: ""; System.out.println (Object_name); getString (); | args_t [3]! = Null || :::::::::::::::::::::::::::::::::- : :::::::::::::::::::::::::::::::::::- :::::::::::::::::::::::::::::::::::::::::- ]! = null) {args [0] = objet_name; contrôleur.handleEvent (uiController.eventid.event_user_regist_edit_back, args);} else if (editor.equal [4]! = "" || Args_t [4]! = Null) {args [0] = object_name; ; || args_t [2]! = null || args_t [3]! = "" || args_t [3]! = null) {args [0] = object_name; [2]; Args [3] = args_t [3]; CommandListener {public void CommandAction (Command Command, afficheable DISP) {if (Command == OKCOMMAND) {RostEt Extbox (true);} else if (Command == CancelCommand) {CloseTExtbox (false); .Token.View; . *; Titre de la chaîne privée; wd_re_y; private intra-sselectedIndex = 0; USERNEMPS USERGE; UserRegist (UIController Contrôle) {super (false); Menu = Menu (ceci); NOUVEAU Textedit (this);} public void show (objet [] args) {// TODO Méthode générée automatique [0]: "";; ) Args [2]: ""; (String) Args [4]: ""; ")) {cursorblinkon1 = false; cursorblinkon2 = true; cursorlinkon3 = false; actuellementselectedIndex = 1;} else if (editor.equals (" regist_passwd_re ")) {cursorblinkon1 = false; cursorblinkon2 = false; cursorblinkon3 = true; Actuellement-SELLECTION; } //System.out.println(Object_name); Graphiques); 0: {CursorBinkon2 = false; cursornkon2 = false; wd_y, cu RSORBLINKON2); , Police .STYLE_BOLD, FONT.SIZE_LARGE); String info = "Username: / n"; ); } texto-greffe_xe) = 5; = StringDealMethod.Format (info, width-10, ft); (info_wrap2 [i], 5, (i + info_wrap1.length) * ft.getheight () + textEdit_name.height + margin + 40, graphics.top | graphics.left); + info_wrap2 .length) * ft.getheight () + textaldit_name.height + margin + 40; ] = StringDealMethod.Format (info, width-10, ft); drawstring (info_wrap3 [i], 5, (i + info_wrap1.length + info_wrap2.length) * ft.getheight () + texttedit_name.height + textedit_passwd.height + 2 * margin + 40, grra phics.top | graphics.left) ; , passwd_re, textalt_passwd_re_x, textaldit_passwd_re_y, cursorblinkon3);} = System.Currenttimemillis (); ")) {cursorblinkon1 =! cursorblinkon1; cursorlinkon2 = false; cursorlinkon3 = false;} else if (editor.equals (" regist_passwd ")) {cursorlinkon1 = false; cursorblin kon2 =! cursorlinkon2; cursorblinkon3 = false;} .Equals ("Regist_Passwd_re")) (true) {checktimestamp (); ; ! = "" && passwd! = "" && passwd_re! = "") {if (passwd.equals (passwd_re)) {userrecord.db_deleteallrecord (); UserDataitem (1, (Username + ", + Passwd) .getBytes (); ac tivescreen ", null, update}; contrôleur .handleevent (uiController.eventid.event_next_active_token_screen, args);}} break;} caseyId.key_edit: case key_num0: case key_num1: c ase key_num2: case key_num3: case clés : Case KEY_NUM6: Case Key_Num7: Case Key_Num8: Case Key_Num9: {//System.out.println(editor); .Event_USER_REGIST_EDIT, Args); {Redraw ();} Break;} Cas: {actuellement
【analyser】
1 dessin de zones de texte (textedit.java)
Vous devez passer des GameCanvas et des objets graphiques pour implémenter le dessin, qui utilise la stratégie et qui passe ce paramètre. De plus, le coin supérieur gauche coordonne (x, y) de la zone de texte sous le lit et la variable cursorblinkon qui contrôle le clignotement du curseur.
Public Void DrawTextBox (GameCanvas Canvas, Graphics Graphics, String Text, int x, int y, boolean cursorblinkon) {//system.out.println("Draw "); Souplit (FONT.Face_Proportional, FONT.STYLE_PLAIN, FONT.SIZE_MEDIUM); Bandinage; Graphics.SetColor (Color.Frame); Largeur, hauteur); , x + padding, y + padding, graphics.top | graphics.left); .flushGraphics (x, y, largeur, hauteur);
2 dessiner le curseur (textedit.java)
public void Drawcursor (graphiques graphiques, int x, int y, intr, int hauteur, booléen cursorblinkon) {if (cursorblinkon) {ft = font.getfont (font.size_medium); setFont (ft); Graphics.setColor (0x0,0x0,0x0);
3 Implémenter le clignotement du curseur
L'implémentation du clignotement du curseur nécessite du threading.
UIConTroller.Javacase EventID.Event_NEXT_USER_REGIST_SCREA () {Long Currenttime = System.CurrentTimeMillis (); .Equals ("Regist_name")) {CursorBinkon1 =! } else if (editor.equals (regist_passwd_re ") {cursorblinkon1 = false; Exécuter "); while (true) {checktimeStamp (); rederser (); try {synchronisé (this) {//system.out.println("3"); wait (50l);}} catch (exception e) { E.
4 Appelez la sous-classe Advanced Interface Sous-classe PopupTextBox
Lors de l'appel, le nom de l'objet d'appel, le nom de l'objet Modifier et les paramètres de la zone d'édition sont transmis à l'objet PopupTextBox (doivent l'avoir, le but est d'enregistrer la valeur de la boîte d'édition. Sinon, lorsque plusieurs appels reviennent, les valeurs de différentes boîtes d'édition seront rafraîchies pour vider.
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.printnnn (éditeur); args); midlet.setCurrent (TextBox);
5 Réception des paramètres PopupTextoxbox
public void init (objet [] args) {object_name = ((string) args [0]! = null)? (String) args [0]: ""; ? (String) Args [1]: "";
6 PopupTextBox renvoie l'entrée de valeur de la méthode d'entrée
if (update) canVastext = this.getString ();
7 PopupTextoxbox Traitement de la valeur d'entrée
Traitez la valeur d'entrée en fonction de l'objet appelé et de l'objet Modifier et passez-le à la zone Edit d'objet parent.
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] = objet_name; ] 0 ]! = null || args_t [4]! = "" || args_t [4]! = null) {args [0] = objet_name; args [1] = éditeur; [3] = this.canvastext; 2]! = "" || Args_t [2]! = Null || args_t [3]! = "" || args_t [3]! = Null) {args [0] = object_name; args [1] = éditeur; Args [2] = args_t [2]; Args [3] = args_t [3];
8 Affichage des valeurs d'entrée
(1) Créer un nouvel objet
Private Textedit textedit_name;
(2) accepter les paramètres d'entrée
object_name = ((string) args [0]! = null)? (String) args [0]: ""; "; username = ((string) args [2]! = null)? (String) args [2]:" "; passwd = ((String) args [3]! = null)? (String) args [3] : "";;
(3) Contrôle du curseur, positionnement vers l'objet de montage et contrôlant le clignotement du curseur de l'objet d'édition (méthode d'exécution)
VOID PRIVÉE REDRAW () {Switch (actuellement SpreeledInde Break;
(4) Dessin de la boîte d'édition
private void rederser () {... textedit_name.DrawTextBox (this, graphics, username, textedit_name_x, textedit_name_y, cursorblinkon1); DrawTextBox (ceci, Graphiques, passwd_re, textatedit_passwd_re_x, textedit_passwd_re_y, cursorblinkon3);
L'effet obtenu est illustré à la figure 1: