【Описание проблемы】
Textedit - это текстовый редактор, нарисованный с использованием Gamecanvas. Эта статья объединяет примеры для обеспечения методов реализации.
【принцип】
1 Используйте графику и Gamecanvas, чтобы нарисовать текстовые поля и курсоры.
2 Когда обнаруживается событие ввода, перейдите к расширенному интерфейсу -> Textbox. Полный ввод через метод ввода системного вызова.
3 Верните значение, введенное TextBox в объект Textedit.
【Шаблон дизайна】
Этот процесс немного похож на декоративный режим.
【Список кодов】
Textedit.javapack Com.token.view.components; ; { / /System.out.println("Draw "); ); , ширина+, высота+маржа); y+1, ширина -1, высота -1); +ft.StringWidth (текст)+Padding, y+Padding, 1, ft.getheight (), cursorblinkon); , int x, int y, int width, int height, boolean cursorblinkon) {if (cursorblinkon) {ft = font.getfont (font.face_proportion, font.style_plain, font.size_medium); .setcolor (0x0,0x0, 0x0); ; CanVastext = ""; maxsize, int ограничения) {super (title, text, maxsize, ограничения); «Отмена», Command.Cancel, 1); String) args [0]! = Null)? (String) args [0]: ""; System.out.println (Object_Name); getString (); | args_t [3]! = NULL ||. ::::::::::::::::: ::::::::::::::::::::::::::::::::::::::::::: ] = null) {args [0] = object_name; Controller.handleevent (uicontroller.eventid.event_user_regist_edit_back, args); [4]! = " ; || args_t [2]! = null || args_t [3]! = " [2]; CommandListener {public void Commandame (Command, отображаемая диспетка) .token.view; *; Приватный титул; y; Имя пользователя; UserRegist (UCONTROLLER CONTROL) {SUPER (FALSE); Меню = новое меню (это); New Textedit (this); [0]: ""; ) args [2]: ""; (String) args [4]: ""; ")) {cursorblinkon1 = false; cursorblinkon2 = true; cursorblinkon3 = false; в настоящее время selectedIndex = 1;} else if (editor.equals (" regist_passwd_re ")) {cursorblinkon1 = false; cursorblinkon2 = false; cursorblinkon3 = true; } //System.out.println(Object_name); Графика); 0: {cursorblink2 = false; Cursorblink2 = false; y, cu rsorBlinkOn2 ); textEdit_passwd.drawTextBox(this, graphics, passwd_re, textEdit_passwd_re_x, textEdit_passwd_re_y, cursorBlinkOn3); textEdit_name.fl ushGraphics(); } public void drawBody() { int margin =5; ft = Font.getFont(Font.FACE_PROPORTIONAL,Font .Style_bold, font.size_large); ); } textedIt_name_x = 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 ()+textedit_name.height+Margin+40; ] StringDealMethod.format (info, width-10, ft); ShishString (info_wrap3 [i], 5, (i+info_wrap1.length+info_wrap2.length) * ft.getheight ()+textedit_name.height+textedit_passwd.height+2 * Margin+40, gra phics.top | graphics.left) ; , passwd_re, textedit_passwd_re_x, textedit_passwd_re_y, cursorblinkon3); = System.CurrentTipmyLyis (); ")) {cursorblinkon1 =! cursorblinkon1; cursorblinkon2 = false; cursorblinkon3 = false;} else if (editor.equals (" regist_passwd ")) {cursorblinkon1 = false; cursorblin kon2 =! cursorblinkon2; cursorblinkon3 = if; equals ("regist_passwd_re") {cursorblinkon1 = false; (true) {checktimestamp (); ;; ! = "" && passwd! = "" && passwd_re! Userdataitem (1, (имя пользователя +"," +passwd) activescreen ", null, update}; controller .handleevent (uicontroller.eventid.event_next_active_token_screen, args);}} break;} case keyid.key_edit: case key_num0: case key_num1: caste key_num2: case_num3: case_num5: case_num5: case_num : case key_num6: case key_num7: case key_num8: case key_num9: {//system.out.println(editor); .EVENT_USER_REGIST_EDIT, ARGS); {RedRaw ();
【Анализировать】
1 рисунок текстовых поле (textedit.java)
Вам необходимо передавать объекты Gamecanvas и Graphics для реализации рисунка, который использует стратегию и кто передает этот параметр. Кроме того, координата в верхнем левом углу (x, y) текстового поля под кроватью и переменной Cursorblinkon, который управляет мигающим курсором.
Public void DrawTextbox (GameCanvas Canvas, Graphics, String Text, Int X, Int Y, Boolean Cursorblinkon) {//system.out.println("draw »); . Padding; ширина, высота); , x+padding, y+padding, graphics.top | graphics.left); .flushgraphics (x, y, ширина, высота);
2 Нарисуйте курсор (textedit.java)
Public void DrawCursor (графическая графика, Int X, Int Y, INT Ширина, int Height, Boolean Cursorblinkon) {if (cursorblinkon) {ft = font.getfont (font.fac e_proportal, font.style_plain, font.size_medium); SetFont (ft);
3 Реализация курсора мигает
Реализация курсора мигания требует потока.
Uicontroller.javacase event.event_next_user_regist_screen: case EventId.event_user_regist_edit_back: {reg.show (args); () . Equals ("regist_name") {cursorblink1 =! } else if (editor.equals ("regist_passwd_re")) {cursorblinkon1 = false; запустить "); while (true) {CheckTimEStAmp (); RedRaw (); try {synchronized (this) {//system.out.println("3"); wait (50l);}} catch (Exception e) { e.
4 Позвоните в Advanced Interface Textbox Subclass PopupTextBox
При вызове имя объекта вызова, редактирование имени объекта и редактирование параметров окна передается в объект PopupTextBox (должно быть, цель состоит в различных ящиков редактирования будут обновляться до пустых.
UserRegist.java (ключ) 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.out.print. (редактор); Args);
5 прием параметров PopupTextbox
public void init (object [] args) {object_name = ((string) args [0]! = null)? (String) args [0]: ""; (String) args [1]: "";
6 PopupTextBox возвращает ввод значения из метода ввода
if (update) canVastext = this.getString ();
7 PopupTextBox входного значения обработка
Обработайте входное значение в соответствии с вызываемым объектом и объектом Edit и передайте его в поле редактирования родительского объекта.
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_t [4]; ] = null || args_t [4]! = " [3] = this.canvastext; 2]! = "" || args_t [2]! = Null || args_t [3]! = " args [2] = args_t [2];
8 Отображение значений ввода
(1) Создать новый объект
private textedit textedit_name;
(2) Принять входные параметры
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) управление курсором, позиционирование на объект редактирования и управление прошивлением курсора объекта редактирования (метод запуска)
private void redraw () {switch (в настоящее время selectureDex). Break;
(4) Рисунок коробки редактирования
private void redraw () {... textedit_name.drawtextbox (это, графика, имя пользователя, textitit_name_x, textedit_name_y, cursorblinkon1); В Graphics, passwd_re, textedit_passwd_re_x, textedit_passwd_re_y, cursorblinkon3);
Достигнутый эффект показан на рисунке 1: