1、允许自定义ITEM,但必须实现CustomItem中的所有抽象方法才能实例化,支持ItemStateListener接口。
2、CustomItem子类实例可以接受键盘和触笔输入。getPrefContentWidth表示最佳内容宽度等
3、完成一个图形按钮的定义,这个按钮接收键盘输入。
4、图
5、代码
package test;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class VisualMIDlet extends MIDlet implementsCommandListener,ItemStateListener {
privateboolean midletPaused = false;
//<editor-fold defaultstate="collapsed" desc="Generated Fields ">
private Formform;
privateTextField textField;
privateAlert alert;
privateCommand exitCommand;
//</editor-fold>
private imagebutton imagebut;
publicVisualMIDlet() {
}
//<editor-fold defaultstate="collapsed" desc="Generated Methods ">
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Generated Method: initialize ">
private voidinitialize() {
// write pre-initialize user code here
// write post-initialize user code here
}
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Generated Method: startMIDlet ">
public voidstartMIDlet() {
// write pre-action user code here
switchDisplayable(null, getForm());
form.append(getimageButton("Login"));
// write post-action user code here
}
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Generated Method: resumeMIDlet ">
public voidresumeMIDlet() {
// write pre-action user code here
switchDisplayable(null, getForm());
// write post-action user code here
}
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Generated Method: switchDisplayable ">
public voidswitchDisplayable(Alert alert, Displayable nextDisplayable) {
// write pre-switch user code here
Display display = getDisplay();
if (alert == null) {
display.setCurrent(nextDisplayable);
} else {
display.setCurrent(alert, nextDisplayable);
}
// write post-switch user code here
}
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Generated Getter: form ">
public FormgetForm() {
if (form == null) {
// write pre-init user code here
form = new Form("form", new Item[] { getTextField() });
form.addCommand(getExitCommand());
form.setCommandListener(this);
form.setItemStateListener(this);
// write post-init user code here
}
return form;
}
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Generated Getter: textField ">
publicTextField getTextField() {
if (textField == null) {
// write pre-init user code here
textField = new TextField("textField", null, 32,TextField.ANY);
// write post-init user code here
}
return textField;
}
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Generated Method: commandAction for Displayables">
public voidcommandAction(Command command, Displayable displayable) {
// write pre-action user code here
if (displayable == form) {
if (command == exitCommand) {
// write pre-action user code here
exitMIDlet();
// write post-action user code here
}
}
// write post-action user code here
}
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Generated Getter: exitCommand ">
publicCommand getExitCommand() {
if (exitCommand == null) {
// write pre-init user code here
exitCommand = new Command("/u9000/u51FA", Command.EXIT, 0);
// write post-init user code here
}
return exitCommand;
}
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="Generated Getter: alert ">
public AlertgetAlert() {
if (alert == null) {
// write pre-init user code here
alert = new Alert("alert", "/u4F60/u9009/u62E9/u4E86Custom/u5B50/u7C7B/u5B9E/u4F8B", null, AlertType.INFO);
alert.setTimeout(Alert.FOREVER);
// write post-init user code here
}
return alert;
}
//</editor-fold>
private imagebutton getimageButton(String name){
if (imagebut==null) imagebut=new imagebutton(name);
return imagebut;
}
publicDisplay getDisplay () {
return Display.getDisplay(this);
}
public voidexitMIDlet() {
switchDisplayable (null, null);
destroyApp(true);
notifyDestroyed();
}
public voidstartApp() {
if (midletPaused) {
resumeMIDlet ();
} else {
initialize ();
startMIDlet ();
}
midletPaused = false;
}
public voidpauseApp() {
midletPaused = true;
}
public voiddestroyApp(boolean unconditional) {
}
classimagebutton extends CustomItem{
private Image image;
private String label;
private Font font;
protected imagebutton(String label){
super("");
this.label=label;
image=Image.createImage(30,30);
font=Font.getFont(Font.FACE_PROPORTIONAL,Font.STYLE_BOLD,Font.SIZE_SMALL);
Graphics graphics=image.getGraphics();
graphics.setColor(255,0,0);
graphics.fillRect(0, 0, 30, 30);
graphics.setColor(0,255,0);
graphics.setFont(font);
graphics.drawString(label,0, 0, Graphics.LEFT|Graphics.TOP);
}
protected int getMinContentWidth() {
return font.stringWidth(label);
}
protected int getMinContentHeight() {
return font.getHeight();
}
protected int getPrefContentWidth(int PrefWidth) {
return font.stringWidth(label)+5;
}
protected int getPrefContentHeight(int PrefHeight) {
returnfont.getHeight()+5;
}
protected void paint(Graphics g, int w, int h) {
if (image!=null){
g.drawImage(image,0,0, Graphics.TOP|Graphics.LEFT);
}
}
protected void keyPressed(int keyCode){
notifyStateChanged();
}
}
publicvoid itemStateChanged(Item item) {
if (item==imagebut){
switchDisplayable(getAlert(), getForm());
}
}
}