java怎么刷新文本框_JavaMe开发绘制文本框TextEdit

【问题描述】TextEdit是采用GameCanvas绘制的文本编辑器。本文结合实例给出实现的方法。【原理】1 运用Graphics、GameCanvas绘制文本框和光标。2 检测到输入事件时,跳转到 高级界面->TextBox 。通过系统调用输入法完成输入。3 将TextBox输入的值返回给TextEdit对象。【设计模式】这个过程有点类似装饰模式,实际上,实现输入的还是TextBox,只...
摘要由CSDN通过智能技术生成

【问题描述】

TextEdit是采用GameCanvas绘制的文本编辑器。本文结合实例给出实现的方法。

【原理】

1 运用Graphics、GameCanvas绘制文本框和光标。

2 检测到输入事件时,跳转到 高级界面->TextBox 。通过系统调用输入法完成输入。

3 将TextBox输入的值返回给TextEdit对象。

【设计模式】

这个过程有点类似装饰模式,实际上,实现输入的还是TextBox,只是给TextBox装饰了一下,形成了一个漂亮的外观。

【代码清单】

TextEdit.java

package 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.java

package 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值