【Descrição do problema】
O texto é um editor de texto desenhado usando GameCanvas. Este artigo combina exemplos para fornecer métodos de implementação.
【princípio】
1 Use gráficos e gamecanvas para desenhar caixas de texto e cursores.
2 Quando um evento de entrada for detectado, pule para a interface avançada -> TextBox. Entrada completa através do método de entrada de chamadas do sistema.
3 Retorne o valor inserido pela caixa de texto para o objeto Textedit.
【Padrão de design】
Esse processo é um pouco semelhante ao modo decorativo.
【Lista de códigos】
Textitit.javapacke com.token.view.comPonents; Largura pública; ) {/System.out.println("draw "); ); , largura+margem, margem de altura); y+1, largura -1, altura -1); +ft.stringwidth (texto)+preenchimento, y+preenchimento, 1, ft.getheight (), cursorblinkon); , int x, int y, largura, int altura, cursorblinkon booleano) {if (cursorblinkon) {ft = font.getfont (font.face_proporation, font.style_plain, font.size_medium); .Setcolor (0x0,0x0, 0x0); Importação de importação.Microedition.lcdui CanVastext = " MaxSize, int restrições) {Super (título, texto, maxSize, restrições); "Cancelar", Command.Cancel, 1); String) args [0]! = NULL)? (String) args [0]: ""; System.Println (Object_Name); getString (); | args_t [3]! = NULL ||. : ::::::::::::::::::::::Here :::::::::::::::::::hee :::::::::::::::::heo the : :::::::::::::::::::::::::hee ::::::::::::::::::::::hee:::::::::::::::::::ree they :::::::::::::::heo thle the :::::::::::::regs ]! controlador.HandleEvent (uicontroller.eventid.event_user_regist_edit_back, args); [4]! = "" Args_t [4]! args [4] = args_t [4]; || args_t [2]! = null || args_t [3]! = "" || args_t [3]! [2]; CommandListener {public void CommandAction (Comando, Display Disp) {if (Command == OKCommand) {Extbox (true); .TOKEN.VENS; .*; Título da String Private; y; Nome de usuário; UserRegist (UICONTROLLER CONTROLE) {super (false); MENU = MENU (TI); new textedit (this); [0]: ""; ) args [2]: ""; (String) Args [4]: " ")) {cursorblinkon1 = false; cursorblinkon2 = true; cursorblinkon3 = false; atualmente selecionadoindex = 1;} else if (editor.equals (" regist_passwd_re ")) {cursorblinkon1 = falselinder; } //System.out.println(object_name); gráficos); 0: {Cursory, False; Cursorblinkon2 = FALSO; wd_y, cu Rsorblinkon2); ONT .Style_bold, font.size_large); ); } textit_name_x = 5; = StringDealMethod.Format (Info, Width-10, ft); (info_wrap2 [i], 5, (i+info_wrap1.length) * ft.getheight ()+textedit_name.Height+margem+40, graphics.top | graphics.left); +info_wrap2 .length) * ft.gethight ()+textedit_name.Height+margem+40; ] = StringDealMethod.Format (Info, Width-10, ft); drawstring (info_wrap3 [i], 5, (i+info_wrap1.length+info_wrap2.length) * ft.getheight ()+textedit_name.Height+textEdit_passwd.Height+2 * margem+40, phics.top | graphics.left) ; passwd_re, textit_passwd_re_x, textedit_passwd_re_y, cursorblinkon3); = System.currenttimemillis (); ")) {CursorBlinkon1 =! CursorBlinkon1; CursorBlinkon2 = false; CursorBlinkon3 = false;} else if (editor.equals (" regist_passwd ")) {cursorblinkon1 = false; .equals (Regist_passwd_re ") {Cursorblinkon1 = false; (true) {checktime (); }}}} Protec TED KeyPressed (int keycode) {switch (KeyCode) {case keyid.soft_right: {controller.handleevent (uicontroller.eventid.event_exit, null); ! = "" && passwd! = "" && passwd_re! = "") {if (passwd.equals (passwd_re)) {userrecord.db_deleteAllRecord (); UserDataitem (1 nome de usuário +"," Passwd) .getbytes ()); tivescreen ", nulo, atualização}; controlador .HandleEvent (uicontroller.eventId.event_next_active_token_screen, args);}} interrupção;} case key_key_edit: cast Key_num0: case_num1: CELA ASE4: : case key_num6: case key_num7: case key_num8: case key_num9: {//system.out.println(editor); .Event_user_regist_edit, args); {redraw ();
【analisar】
1 desenho de caixas de texto (textedit.java)
Você precisa passar os objetos gamecanvas e gráficos para implementar o desenho, quem usa a estratégia e que passa esse parâmetro. Além disso, a coordenada do canto esquerdo superior (x, y) da caixa de texto sob o leito e a variável cursorblinkon que controla o cursor piscando.
public void drawTextBox (tela de gamecanvas, gráficos, texto de string, int x, int y, booleano cursorblinkon) {//system.out.println("draw "); getFont (font.face_proporcional, font.style_plain, font.size_medium); preenchimento; largura, altura); , x+preenchimento, y+preenchimento, gráfico.top | Graphics.left); .fushgraphics (x, y, largura, altura);
2 Desenhe o cursor (textedit.java)
public void drawcursor (gráficos gráficos, int x, int y, int largura, int altura, cursorblinkon booleano) {if (cursorblinkon) {ft = font.getFont (font.fac e_proporcional, font.style_plain, font.size_medium); setfont (ft);
3 Implementar o cursor piscando
A implementação do Cursor Flashing requer encadeamento.
Uicontroller.javacase EventID.Event_Next_USER_RESENTE_RESENTE O CASE EVEDID.EVENT_USER_EGRÁVEL () {Long CurrentTime = System.CurrentTimMillis (); .Equals (Regist_name ") {CursorBlinkon1 =! } else if (editor.equals ("regist_passwd_re")) {cursorblinkon1 = false; execute "); while (true) {checkTimeSTamp (); Redraw (); Try {Synchronized (this) {//system.out.println("3"); espera (50l);}} catch (Exceção e) { e.
4 Chame de interface avançada Subclass PopuptExtBox
Ao chamar, o nome do objeto de chamada, editar o nome do objeto e os parâmetros da caixa de edição são passados para o objeto PopUPTEXTBOX (deve tê -lo, o objetivo é salvar o valor da caixa de edição. Caso contrário, quando várias chamadas retornarem, os valores de diferentes caixas de edição serão atualizadas para esvaziar.
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: {/num6: //sym6: case key_num7: case_num8: case_num9: {/num6 (Editor); args);
5 Recepção de parâmetros do PopUPTEXTBOX
public void init (objeto [] args) {object_name = ((string) args [0]! = null)? (string) args [0]: ""; ? (String) args [1]: "
6 PopUPTEXTBox Retorna a entrada de valor do método de entrada
if (update) canVastext = this.getString ();
7 Processamento de valor de entrada do PopUPTEXTBox
Processe o valor de entrada de acordo com o objeto chamado e o objeto de edição e passe -o para a caixa de edição do objeto pai.
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] = objeto_name; ] = args_t [4]; ]! = null || args_t [4]! = "" || args_t [4]! [3] = this.Canvastext; 2]! = "" || args_t [2]! = Null || args_t [3]! = "" || args_t [3]! args [2] = args_t [2];
8 Exibição dos valores de entrada
(1) Crie um novo objeto
TEXTA DE TEMPLO DE PROVIDADE DE TEMPLO DE TEMPLO DE TEMPLO;
(2) Aceite parâmetros de entrada
object_name = ((string) args [0]! = null)? (String) args [0]: ""; "; nome de usuário = ((string) args [2]! = null)? (string) args [2]:" "; passwd = ((string) args [3]! = null)? (string) args [3] : "";
(3) Controle do cursor, posicionamento no objeto de edição e controle do cursor piscando do objeto de edição (método de execução)
private void redraw () {switch (atualmente, Break;
(4) Desenho da caixa de edição
private void redraw () {... textit_name.drawtextbox (this, gráficos, nome de usuário, textedit_name_x, textedit_name_y, cursorblinkon1); Caixa de texto (this, Graphics, passwd_re, textit_passwd_re_x, textedit_passwd_re_y, cursorblinkon3);
O efeito alcançado é mostrado na Figura 1: