【คำอธิบายปัญหา】
TextEdit เป็นตัวแก้ไขข้อความที่วาดโดยใช้ gamecanvas บทความนี้รวมตัวอย่างเพื่อให้วิธีการใช้งาน
【หลักการ】
1 ใช้กราฟิกและ gamecanvas เพื่อวาดกล่องข้อความและเคอร์เซอร์
2 เมื่อตรวจพบเหตุการณ์อินพุตให้ข้ามไปที่อินเตอร์เฟสขั้นสูง -> กล่องข้อความ ป้อนเข้าผ่านวิธีการป้อนข้อมูลการเรียกใช้ระบบ
3 ส่งคืนค่าที่ป้อนโดยกล่องข้อความไปยังวัตถุ TEXTEDIT
【รูปแบบการออกแบบ】
กระบวนการนี้คล้ายกับโหมดการตกแต่งเล็กน้อย
【รายการรหัส】
Textedit.javapackage com.token.view.components; ความกว้างของสาธารณะ ) { / / sestem.out.println("Draw "); ); ความกว้าง+มาร์จิ้น, ความสูง+มาร์จิ้น); y+1, ความกว้าง -1, ความสูง -1); +ft.stringwidth (ข้อความ)+padding, y+padding, 1, ft.getheight (), cursorblinkon); , int x, int y, ความกว้าง int, ความสูง int, boolean cursorblinkon) {ถ้า (cursorblinkon) {ft = font.getfont (font.face_proportional, font.style_plain, font.size_medium); .SetColor (0x0,0x0, 0x0); นำเข้า Javax.microedition.lcdui canvastext = "" คำสั่งส่วนตัว; maxsize, int constraints) {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 [4]! = null) {args [0] = object_name; args [4] = args_t [4]; || args_t [2]! = null || args_t [3]! = "" || args_t [3]! = null) {args [0] = object_name; [2]; CommandListener {คำสั่งโมฆะสาธารณะ (คำสั่งคำสั่ง, disptaible disp) {if (command == okcommand) {closet extbox (จริง); . Token.View; *; TEXTEDITEDITEDITEDITEDITEDITEDITEDITET y; ชื่อผู้ใช้; ผู้ใช้งาน (การควบคุม UICONTROLLER) {Super (FALSE); เมนูใหม่ (สิ่งนี้); TEXTEDIT ใหม่ (นี่); [0]: "; ) args [2]: "; (String) args [4]: "ถ้า editor.equals (" regist_name ") {cursorblinkon1 = true; ")) {cursoRblinkon1 = false; cursorblinkon2 = true; cursorblinkon3 = false; ปัจจุบัน lexelectedIndex = 1;} อื่นถ้า (editor.equals (" regist_passwd_re ")) {cursorblinkon1 = false; cursorblinkon2 = false; }/system.out.println(Object_name); กราฟิก); 0: cursorblinkon2 = false; cursorblinkon2 = false; y, cu RSORBLING2); Ont .STYLE_BOLD, FONT.SIZE_LARGE); ); สำหรับ (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; = StringDealMethod.Format (ข้อมูล, 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 (ข้อมูล, Width-10, ft); drawstring (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.currentTimemillis (); ")) {cursorblinkon1 =! cursorblinkon1; cursorblinkon2 = false; cursorblinkon3 = false;} อื่นถ้า (editor.equals (" regist_passwd ") {cursorblinkon1 = false; cursorblin kon2 =! .Equals ("regist_passwd_re")) {cursorblinkon1 = false; (จริง) {chectimestamp (); ; ! = "" && passwd! = "" && passwd_re! = "") {ถ้า (passwd.equals (passwd_re)) {userrecord.db_deleteallrecord (); UserDataItem (1, (ชื่อผู้ใช้ +"," +passwd) .getBytes ()); ac tivescreen ", null, update}; controller .handleevent (uicontroller.eventid.event_next_active_token_screen, args);}} break;} case keyid.key_edit: case_num0: case key_num1 : case key_num6: case key_num7: case key_num8: case key_num9: {//system.out.println ededitor); .EVENT_USER_REGIST_EDIT, ARGS); {redraw ();
【วิเคราะห์】
1 ภาพวาดของกล่องข้อความ (textedit.java)
คุณต้องผ่าน Gamecanvas และวัตถุกราฟิกเพื่อใช้การวาดภาพผู้ใช้กลยุทธ์และผู้ที่ผ่านพารามิเตอร์นี้ นอกจากนี้พิกัดมุมซ้ายบน (x, y) ของกล่องข้อความใต้เตียงและตัวแปร cursorblinkon ที่ควบคุมเคอร์เซอร์กะพริบ
Public DrawTextBox (GameCanvas Canvas, กราฟิกกราฟิก, ข้อความสตริง, int x, int y, บูลีน cursorblinkon) {//system.out.println("Draw "); . Padding; ความกว้าง, ความสูง); , x+padding, y+padding, graphics.top | graphics.left); .FlushGraphics (x, y, ความกว้าง, ความสูง);
2 วาดเคอร์เซอร์ (textedit.java)
Drawcursor สาธารณะ (กราฟิกกราฟิก, int x, int y, ความกว้าง int, ความสูง int, บูลีน cursorblinkon) {ถ้า (cursorblinkon) {ft = font.getfont (font.fac e_proportional, font.style_plain, font.size_medium); SetFont (ft);
3 ใช้เคอร์เซอร์กะพริบ
การใช้งานเคอร์เซอร์แฟลชต้องใช้เธรด
uicontroller.javacase eventid.event_next_user_regist_screen: case eventid.event_user_regist_edit_back: {reg.show (args); () {long currenttime = system.currenttimemillis (); .Equals ("regist_name") {cursorblinkon1 =! } ถ้า (editor.equals ("regist_passwd_re")) {cursorblinkon1 = false; เรียกใช้ "); ในขณะที่ (จริง) {chectimestamp (); redraw (); ลอง {ซิงโครไนซ์ (นี่) {//system.out.println("3"); รอ (50l);}} catch (ยกเว้น e) { e.
4 โทรไปที่ 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_num9 (บรรณาธิการ); args);
5 POPUPTEXTBOX การรับพารามิเตอร์
โมฆะสาธารณะ init (Object [] args) {object_name = ((สตริง) args [0]! = null)? (สตริง) args [0]: ""; (String) args [1]: ";
6 popuptextbox ส่งคืนค่าอินพุตจากวิธีการป้อนข้อมูล
ถ้า (อัปเดต) canVastext = this.getString ();
7 การประมวลผลค่าอินพุต popuptextbox
ประมวลผลค่าอินพุตตามวัตถุที่เรียกว่าและวัตถุแก้ไขและส่งผ่านไปยังกล่องแก้ไขวัตถุแม่
if (object_name.equals ("RegistsCreen")) {ถ้า (editor.equals ("regist_name")) {ถ้า (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]! = "" || args_t [4]! = null) {args [0] = object_name; [3] = this.canvastext; 2]! = "" || args_t [2]! = null || args_t [3]! = "" || args_t [3]! = null) {args [0] = object_name; args [2] = args_t [2];
8 การแสดงค่าอินพุต
(1) สร้างวัตถุใหม่
TextEdit Private TextEdit_name;
(2) ยอมรับพารามิเตอร์อินพุต
Object_name = ((String) args [0]! = null)? (String) args [0]: ""; "; ชื่อผู้ใช้ = ((สตริง) args [2]! = null)? (สตริง) args [2]:" "; passwd = ((สตริง) args [3]! = null)? (สตริง) args [3] : "";
(3) การควบคุมเคอร์เซอร์การวางตำแหน่งไปยังวัตถุแก้ไขและควบคุมเคอร์เซอร์กระพริบของวัตถุแก้ไข (วิธีการเรียกใช้)
โมฆะส่วนตัว redraw () {switch (ปัจจุบัน switch (cursorblink2 = false; BREAK;
(4) ภาพวาดของกล่องแก้ไข
โมฆะส่วนตัว redraw () {... textedit_name.drawtextbox (นี่, กราฟิก, ชื่อผู้ใช้, textedit_name_x, textedit_name_y, cursorblinkon1); (นี่ กราฟิก, passwd_re, textedit_passwd_re_x, textedit_passwd_re_y, cursorblinkon3);
เอฟเฟกต์ที่ทำได้จะแสดงในรูปที่ 1: