J2ME的一些模版

来源:互联网 发布:少儿英语网络课程 编辑:程序博客网 时间:2024/05/20 07:18

音乐播放模版:

/** * 类说明:音乐的控制 * ware audio files  audio/x-wav * au                audio/basic * mp3               audio/mpeg * midi              audio/midi * tone              audio/x-tone-sep * mpeg              video/mpeg * @author 作者: User * @version 创建时间:2011-3-22 下午10:02:59 */import java.io.InputStream;import javax.microedition.media.Manager;import javax.microedition.media.MediaException;import javax.microedition.media.Player;import javax.microedition.media.control.VolumeControl;public class Music {    private static Music instance;    private Player player;// 创建一个音乐播放器    private VolumeControl volumeControl = null;// 声音控制    private int volume = 50;// 音量的初始值    private static final int MAX = 100;// 音量最大值    private static final int MIN = 0;// 音量最小值    private boolean isplay = false;//是否真正播放    private Music() {    }    // 采用单例模式 返回本类对象    static Music getInstance() {        if (instance == null) {            instance = new Music();        }        return instance;    }    // 播放音乐    public void playMusic() {        player = createPlayer("/city.mid", "audio/midi");// 创建音乐播放器        volumeControl = (VolumeControl) player.getControl("VolumeControl");// 得到音乐控制器        isplay = true;        startPlayer(player);// 开始播放音乐    }    // 停止音乐播放    public void stopMusic() {        try {            if (player != null)                player.stop();            player = null;            isplay = false;        } catch (Exception e) {            e.printStackTrace();        }    }    // 加大音量    public void addVolume() {        if (volumeControl != null) {            volume += 10;            if (volume > MAX)                volume = MAX;            volumeControl.setLevel(volume);        }    }    public boolean isPlay() {        return isplay;    }    // 减小音量    public void subVolume() {        if (volumeControl != null) {            volume -= 10;            if (volume < MIN)                volume = MIN;            volumeControl.setLevel(volume);        }    }        // 设置音量    public void setVolume(int volue) {        if (volumeControl != null) {            volumeControl.setLevel(volue);        }    }    // 开始播放    private void startPlayer(Player p) {        if (p != null) {            try {                p.stop();                p.setLoopCount(-1);                p.start();            } catch (MediaException me) {                me.printStackTrace();            }        }    }    // 创建音乐播放器    private Player createPlayer(String filename, String format) {        Player p = null;        try {            InputStream is = getClass().getResourceAsStream(filename);// 得到音乐文件输入流            p = Manager.createPlayer(is, format);            p.prefetch();        } catch (Exception ioe) {            ioe.printStackTrace();        }        return p;    }}


 

java字符串解析 将字符串解析成字符数组

//字符串解析    private String[] stringAnalytical(String str, String divisionChar) {        String string[];       int i = 0;         StringTokenizer tokenizer = new StringTokenizer(str, divisionChar);        string = new String[tokenizer.countTokens()];// 动态的决定数组的长度         while (tokenizer.hasMoreTokens()) {            string[i] = new String();            string[i] = tokenizer.nextToken();            i++;        }        return string;// 返回字符串数组    }


 

j2me中字符串的解析,将字符串根据特定的字符解析成字符数组:

// 字符串解析,将字符串转根据分割符换成字符串数组    private String[] stringAnalytical(String string, char c) {        int i = 0;        int count = 0;        if (string.indexOf(c) == -1)            return new String[] { string };// 如果不含分割符则返回字符本身        char[] cs = string.toCharArray();        int length = cs.length;        for (i = 1; i < length - 1; i++) {// 过滤掉第一个和最后一个是分隔符的情况            if (cs[i] == c) {                count++;// 得到分隔符的个数            }        }        String[] strArray = new String[count + 1];        int k = 0, j = 0;        String str = string;        if ((k = str.indexOf(c)) == 0)// 去掉第一个字符是分隔符的情况            str = str.substring(k + 1);        if (str.indexOf(c) == -1)// 检测是否含分隔符,如果不含则返回字符串            return new String[] { str };        while ((k = str.indexOf(c)) != -1) {// 字符串含分割符的时候            strArray[j++] = str.substring(0, k);            str = str.substring(k + 1);            if ((k = str.indexOf(c)) == -1 && str.length() > 0)                strArray[j++] = str.substring(0);        }        return strArray;    }


进度条实例模板

import javax.microedition.lcdui.Command;import javax.microedition.lcdui.CommandListener;import javax.microedition.lcdui.Displayable;import javax.microedition.lcdui.Form;import javax.microedition.lcdui.Gauge;public class GaugeUI extends Form implements CommandListener {    private static final int MAX = 8;    private static final int LEVELS = 8;    int current = 0;    Gauge gauge;    Command stopCommand;    boolean stop;    boolean stopped;    /** Creates a new instance of GaugeObserverUI */    public GaugeUI() {        super("");        // 创建一个进度条        gauge = new Gauge("", false, MAX, 0);        stopCommand = new Command("停止", Command.STOP, 10);        addCommand(stopCommand);        append(gauge);        setCommandListener(this);    }    // 初时化进度条    public void init(String note, boolean stop) {        gauge.setValue(0);        setNote(note);        setStop(stop);        stopped = false;    }    // 进度条标题    public void setNote(String note) {        setTitle(note);    }    // 是否停止    public boolean isStop() {        return stop;    }    // 设置进度条停止    public void setStop(boolean stop) {        this.stop = stop;    }    // 是否已停止    public boolean isStopped() {        return stopped;    }    // 更新进度条    public void updateGauge() {        current = (current + 1) % LEVELS;        gauge.setValue(current * MAX / LEVELS);    }    // 处理监听    public void commandAction(Command c, Displayable d) {        if (c == stopCommand) {            stopped = true;            stop();        }    }    // 停止时事件处理    public void stop() {            }}


 

rms模版

import javax.microedition.midlet.MIDlet;import javax.microedition.midlet.MIDletStateChangeException;import javax.microedition.rms.RecordComparator;import javax.microedition.rms.RecordEnumeration;import javax.microedition.rms.RecordFilter;import javax.microedition.rms.RecordStore;public class RmsPricatis extends MIDlet {    public RmsPricatis() {        // TODO Auto-generated constructor stub    }    protected void destroyApp(boolean arg0) throws MIDletStateChangeException {        // TODO Auto-generated method stub    }    protected void pauseApp() {        // TODO Auto-generated method stub    }    protected void startApp() throws MIDletStateChangeException {        try {            RecordStore rs = RecordStore.openRecordStore("rj", true);            /* rs.addRecord("张三".getBytes(), 0, 4);             rs.addRecord("李四".getBytes(), 0, 4);             rs.addRecord("王五".getBytes(), 0, 4);             rs.addRecord("王强".getBytes(), 0, 4);             rs.addRecord("钱王六".getBytes(), 0, 6);*/            RecordEnumeration re = rs.enumerateRecords(new Filter(), new Compare(), false);            while (re.hasNextElement()) {                   System.out.println(new String(rs.getRecord(re.nextRecordId())));            }        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }            }//过滤器    class Filter implements RecordFilter {        public boolean matches(byte[] b) {            String name = new String(b);            if (name.indexOf("王") >= 0) {                return true;            }            return false;        }    }//    比较器    class Compare implements RecordComparator{        public int compare(byte[] b1, byte[] b2) {            String  s1 = new String(b1);            String  s2 = new String(b2);            if(s1.length()>s2.length())                return RecordComparator.FOLLOWS;            else if(s1.length()==s2.length())                return RecordComparator.EQUIVALENT;            else                 return RecordComparator.PRECEDES;        }            }}


 

j2me中将对象转换成字节数组的方法

import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;public class PhoneCard {    private int password;// 电话密码    private long cardNumber;// 电话卡卡号    private double balance;// 电话卡余额    private String conncetNumber;// 电话卡接入号码    private boolean connected;// 电话是否接通    //将对象转换成字节数组    public byte[] PhoneCard2Byte() throws IOException{        byte[] phonecard;// 用于存放转换后的对象        ByteArrayOutputStream baos = new ByteArrayOutputStream();// 字节输出流        DataOutputStream dos = new DataOutputStream(baos);// 数据输出流用于包装字节输出流        dos.writeInt(password);        dos.writeLong(cardNumber);        dos.writeDouble(balance);        dos.writeUTF(conncetNumber);        dos.writeBoolean(connected);        phonecard = baos.toByteArray();// 将写入的数据转换成字节数组        dos.close();        baos.close();        return phonecard;    }    //将字节数组装换成PhoneCard对象    public static  PhoneCard byte2PhonCard(byte[] phonecard)throws IOException{        PhoneCard pc = new PhoneCard();        ByteArrayInputStream bais = new ByteArrayInputStream(phonecard);// 字节输入流        DataInputStream dis = new DataInputStream(bais);// 数据输入流用于包装字节输入流        // 从流中读取数据,顺序要和写入时一至        pc.setPassword(dis.readInt());        pc.setCardNumber(dis.readLong());        pc.setBalance(dis.readDouble());        pc.setConncetNumber(dis.readUTF());        pc.setConnected(dis.readBoolean());        dis.close();        bais.close();        return pc;// 返回PhoneCard对象            }    // 返回对象的字符串类型    public String toString(){        return "电话密码 : " + password + "     电话卡号 :" + cardNumber + "    电话余额 :"                + balance + "    接入号码 :" + conncetNumber + "    接通否 :"                + connected;    }    public int getPassword() {        return password;    }    public void setPassword(int password) {        this.password = password;    }    public long getCardNumber() {        return cardNumber;    }    public void setCardNumber(long cardNumber) {        this.cardNumber = cardNumber;    }    public double getBalance() {        return balance;    }    public void setBalance(double balance) {        this.balance = balance;    }    public String getConncetNumber() {        return conncetNumber;    }    public void setConncetNumber(String conncetNumber) {        this.conncetNumber = conncetNumber;    }    public boolean isConnected() {        return connected;    }    public void setConnected(boolean connected) {        this.connected = connected;    }    }


 

j2me联网测试

import java.io.DataInputStream;import javax.microedition.io.Connector;import javax.microedition.io.HttpConnection;import javax.microedition.lcdui.Display;import javax.microedition.lcdui.Form;import javax.microedition.midlet.MIDlet;import javax.microedition.midlet.MIDletStateChangeException;public class Test7_1Http extends MIDlet {private Form form = null;private Display display = null;    public Test7_1Http() {        form = new Form("连网测试");        display = Display.getDisplay(this);    }    protected void destroyApp(boolean arg0) throws MIDletStateChangeException {    }    protected void pauseApp() {    }    protected void startApp() throws MIDletStateChangeException {        try {            HttpConnection connection = (HttpConnection)Connector.open("http://localhost:8080/pdsu.html");                        System.out.println(connection.getResponseCode());//得到连接状态            System.out.println(connection.getResponseMessage());//得到连接响应的消息                        System.out.println(connection.getHost());//得到主机地址            System.out.println(connection.getPort());//得到连接的断口号            System.out.println(connection.getProtocol());//得到连接的协议            System.out.println(connection.getURL());            System.out.println(connection.getRequestMethod());//得到连接方式     默认get                        DataInputStream dis = connection.openDataInputStream();             byte message[];             int length = (int)connection.getLength();             message = new byte[length];             dis.readFully(message);             form.append(new String(message));             display.setCurrent(form);        } catch (Exception e) {            e.printStackTrace();        }    }}


例子

j2me Socket例子

 

客户端:

import java.io.DataOutputStream;import java.io.IOException;import javax.microedition.io.Connector;import javax.microedition.io.SocketConnection;import javax.microedition.lcdui.Command;import javax.microedition.lcdui.CommandListener;import javax.microedition.lcdui.Display;import javax.microedition.lcdui.Displayable;import javax.microedition.lcdui.Form;import javax.microedition.lcdui.TextField;import javax.microedition.midlet.MIDlet;import javax.microedition.midlet.MIDletStateChangeException;public class Test7_2Client extends MIDlet implements CommandListener {    private Form form = null;    private Display display = null;    private TextField field = null;    private Command send = null;    private SocketConnection sc = null;    public Test7_2Client() {        form = new Form("客户端");        display = Display.getDisplay(this);        field = new TextField("文本信息", "", 100, TextField.ANY);        send = new Command("发送", Command.OK, 1);        form.setCommandListener(this);        form.addCommand(send);        form.append(field);    }    protected void startApp() throws MIDletStateChangeException {        display.setCurrent(form);    }    public void commandAction(Command c, Displayable d) {        if (c == send) {            new SendMessage().start();        }    }    protected void destroyApp(boolean arg0) throws MIDletStateChangeException {    }    protected void pauseApp() {    }    class SendMessage extends Thread {        private DataOutputStream dos = null;        public void run() {                        try {                sc = (SocketConnection) Connector                        .open("socket://localhost:50000");                dos = sc.openDataOutputStream();                dos.writeUTF(field.getString());            } catch (Exception e) {                e.printStackTrace();            } finally {                try {                    if (dos != null)                        dos.close();                    if (sc != null)                        sc.close();                } catch (IOException e) {                    e.printStackTrace();                }            }                    }    }}


服务器端:

import java.io.DataInputStream;import java.io.IOException;import javax.microedition.io.Connector;import javax.microedition.io.ServerSocketConnection;import javax.microedition.io.SocketConnection;import javax.microedition.lcdui.Command;import javax.microedition.lcdui.CommandListener;import javax.microedition.lcdui.Display;import javax.microedition.lcdui.Displayable;import javax.microedition.lcdui.Form;import javax.microedition.lcdui.TextField;import javax.microedition.midlet.MIDlet;import javax.microedition.midlet.MIDletStateChangeException;public class Test7_2Server extends MIDlet implements CommandListener {    private Form form = null;    private Display display = null;    private TextField field = null;    private Command accept = null;    private ServerSocketConnection ssc = null;    private SocketConnection sc = null;    private String message = null;    public Test7_2Server() {        form = new Form("服务端");        display = Display.getDisplay(this);        field = new TextField("文本信息", "", 100, TextField.ANY);        accept = new Command("接受", Command.OK, 1);        form.setCommandListener(this);        form.addCommand(accept);        form.append(field);        new AcceptMessage().start();    }    public void commandAction(Command c, Displayable d) {        if (c == accept) {            field.setString(message);        }    }    protected void destroyApp(boolean arg0) throws MIDletStateChangeException {    }    protected void pauseApp() {    }    protected void startApp() throws MIDletStateChangeException {        display.setCurrent(form);    }    class AcceptMessage extends Thread {        private DataInputStream dis = null;        public void run() {            while (true) {                try {                    ssc = (ServerSocketConnection) Connector                            .open("socket://:50000");                    sc = (SocketConnection) ssc.acceptAndOpen();                    dis = sc.openDataInputStream();                    message = dis.readUTF();                    System.out.println("Server : " + message);                } catch (Exception e) {                    e.printStackTrace();                } finally {                    try {                        if (dis != null)                            dis.close();                        if (sc != null)                            sc.close();                        if (ssc != null)                            ssc.close();                    } catch (IOException e) {                        e.printStackTrace();                    }                }            }        }    }}


j2me多线程应用实例

import javax.microedition.lcdui.Display;import javax.microedition.lcdui.Form;import javax.microedition.lcdui.StringItem;import javax.microedition.midlet.MIDlet;import javax.microedition.midlet.MIDletStateChangeException;public class twoStrings extends MIDlet {    Display display;    Form form;    public String promote = "";    StringItem s1 = new StringItem("string1", "" + promote);    StringItem s2 = new StringItem("string1", "" + promote);    public twoStrings() {    }    protected void destroyApp(boolean arg0) throws MIDletStateChangeException {    }    protected void pauseApp() {    }    protected void startApp() throws MIDletStateChangeException {        display = Display.getDisplay(this);        form = new Form("");        form.append(s1);        form.append(s2);        display.setCurrent(form);        Thread1 th1 = new Thread1();        th1.start();        Thread2 th2 = new Thread2();        new Thread(th2).start();    }    class Thread1 extends Thread {        int i = 1;        public void run() {            while (true) {                promote = Integer.toString(i);                i++;                s1.setText(promote);                try {                    Thread.sleep(1000);                } catch (Exception e) {                }            }        }    }    class Thread2 implements Runnable {        int i = 1;        public void run() {            while (true) {                promote = Integer.toString(i);                i++;                s2.setText(promote);                try {                    Thread.sleep(2000);                } catch (Exception e) {                }            }        }    }}


 用Canvas画的菜单:

import javax.microedition.lcdui.Display;import javax.microedition.midlet.MIDlet;import javax.microedition.midlet.MIDletStateChangeException;public class MainMIDlet extends MIDlet {public MainMIDlet() {}protected void destroyApp(boolean unconditional)throws MIDletStateChangeException {}protected void pauseApp() {}protected void startApp() throws MIDletStateChangeException {  Display.getDisplay(this).setCurrent(new MenuCanvas());}}package test;import javax.microedition.lcdui.Canvas;import javax.microedition.lcdui.Graphics;import javax.microedition.lcdui.Image;public class MenuCanvas extends Canvas{public Rect[] rect = new Rect[4];//菜单选项RECT;public Rect text_Rect = null;//文本框RECT;public Rect choce_Rect = null;//按钮RECT;public Rect big_Rect = null;//菜单选项外的RECT;public boolean isClicked = false;//是否点击"选择"public int clicked_Num = -1;//选择了哪项// public Graphics bg = null;// public Image buff = null;public final String[] menu_str = new String[]{"选 择", "比翼双飞", "龙飞凤舞", "双龙戏珠", "好彩当头"};public MenuCanvas(){intiRect();}// public void buffer()// {// buff = Image.createImage(big_Rect.w, big_Rect.h);// bg = buff.getGraphics();// }protected void paint(Graphics g) {// TODO Auto-generated method stub  g.setColor(255, 255, 255);  g.fillRect(0, 0, this.getWidth(), this.getHeight());  drawRect(g);}public void drawRect(Graphics g){text_Rect.drawString(g);choce_Rect.drawString(g);big_Rect.drawString(g);for(int i = 0; i < rect.length; i++){rect[i].drawString(g);}}public void intiRect(){text_Rect = new Rect(40, 40, 80, 20, null, true);choce_Rect = new Rect(130, 40, 40, 20, menu_str[0], false);big_Rect = new Rect(40, 60, 80, 80, null, false);for(int i = 0; i < rect.length; i++){rect[i] = new Rect(40, (60 + i * 20), 80, 20, null, false);}}protected void keyPressed(int keyCode) {super.keyPressed(keyCode);}protected void pointerPressed(int x, int y) {super.pointerPressed(x, y);if(choce_Rect.isClicked(x, y)){isClicked = !isClicked;if(isClicked){choce_Rect.isRect = true;big_Rect.isRect = true;for(int i = 0; i < rect.length; i++){rect[i].menu_str = menu_str[i + 1];rect[i].calculateStringWH();}}else{choce_Rect.isRect = false;big_Rect.isRect = false;text_Rect.menu_str = null;for(int i = 0; i < rect.length; i++){rect[i].menu_str = null;rect[i].isRect = false;}}}else if(big_Rect.isClicked(x, y)){for(int i = 0; i < rect.length; i++){if(rect[i].isClicked(x, y)){clicked_Num = i;rect[i].isRect = true;text_Rect.menu_str = menu_str[i + 1];text_Rect.calculateStringWH();//可以在这里写要跳转的页面方法}else{rect[i].isRect = false;}}}else{choce_Rect.isRect = false;isClicked = false;big_Rect.isRect = false;text_Rect.menu_str = null;for(int i = 0; i < rect.length; i++){rect[i].menu_str = null;rect[i].isRect = false;}}repaint();}}package test;import javax.microedition.lcdui.Font;import javax.microedition.lcdui.Graphics;public class Rect {public int x = 0;public int y = 0;public int w = 0;public int h = 0;public int s_W = 0;public int s_H = 0;public int space_X = 0;public int space_Y = 0;public boolean isRect = false;public String menu_str = null;public Font font = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_LARGE);public Rect(int x, int y, int w, int h, String str, boolean isRect){this.x = x;this.y = y;this.w = w;this.h = h;this.menu_str = str;this.isRect = isRect;calculateStringWH();}public boolean isClicked(int x, int y){if ((x >= this.x && x <= (this.x + this.w))&& ((y >= this.y && y <= (this.y + this.h)))) {  return true;}return false;}public void drawString(Graphics g){g.setColor(0, 0, 0);if(isRect){g.drawRect(x, y, w, h);}if(menu_str != null){g.setFont(font);  g.drawString(menu_str, (x + space_X), (y + space_Y), Graphics.TOP | Graphics.LEFT);}}public void calculateStringWH(){if(menu_str != null){s_W = font.stringWidth(menu_str);s_H = font.getBaselinePosition();if(this.w > s_W){space_X = (this.w - s_W) >> 1;}if(this.h > s_H){space_Y = (this.h - s_H) >> 1;}}}}


 

画出游戏菜单的方法

import javax.microedition.midlet.MIDlet;import javax.microedition.midlet.MIDletStateChangeException;import javax.microedition.lcdui.*;import java.util.Vector;import javax.microedition.lcdui.Canvas;import javax.microedition.lcdui.Font;import javax.microedition.lcdui.Graphics;public class MenuMIDlet extends MIDlet { private MenuCanvas mc; public static MenuMIDlet inc; public MenuMIDlet() {  mc = new MenuCanvas();  inc = this; } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { } protected void pauseApp() { } protected void startApp() throws MIDletStateChangeException {  Display.getDisplay(this).setCurrent(mc); }}class MenuCanvas extends Canvas { private final int LOGO = 0; private final int MENU = 1; private final int GAME = 2; private final int INFO = 3; private final int HELP = 4; private final int EXIT = 5;// 常量表示各个状态 private int zt;// 状态变量 private int width, height;// 屏幕宽和高 private Font ft;// 字体 private String smenu[] = { "new game", "infomation", "hlep", "exit" };// 菜单文字 private String sinfo = "    作者:XXX\n" + "    这些内容你慢慢想";// 介绍文字 private String info[];// 保存介绍文字 private String shelp = "2,8,4,9控制上,下,左,右,确定/5键确定选项,等等等等.这些地方你也自己想吧";// 帮助文字 private String help[];// 保存帮助文字 private int n, m; public MenuCanvas() {  width = getWidth();  height = getHeight();  ft = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_LARGE);  switchZ(MENU); } public void switchZ(int zt) {//改变状态时要做的事  switch (zt) {  case LOGO:   // 我这里就不做LOGO了.   break;  case MENU:   break;  case GAME:   // 游戏等菜单做完了再教你做游戏,一步步来   break;  case INFO:   info = format(sinfo, width, ft);   break;  case HELP:   help = format(shelp, width, ft);   break;  case EXIT:   m = 0;   break;  }  this.zt = zt; } protected void paint(Graphics g) {  g.setClip(0, 0, width, height);  g.setColor(0x000000);  g.fillRect(0, 0, width, height);  switch (zt) {  case LOGO:   break;  case MENU:   drawmenu(g);   break;  case INFO:   drawinfo(g);   break;  case HELP:   drawhelp(g);   break;  case EXIT:   drawexit(g);   break;  } } private void drawexit(Graphics g) {  g.setColor(0x00ff00);  g.setFont(ft);  g.drawString("are you exit", width / 2, height / 2 - 50,    Graphics.HCENTER | Graphics.TOP);  if (m == 1) {   g.setColor(0xff0000);  } else {   g.setColor(0xffffff);  }  g.drawString("yes", 35, height - 50, 20);  if (m == 0) {   g.setColor(0xff0000);  } else {   g.setColor(0xffffff);  }  g.drawString("no", width - 35, height - 50, 24); } private void drawhelp(Graphics g) {  g.setColor(0xffffff);  g.setFont(ft);  for (int i = 0; i < help.length; i++) {   g.drawString(help[i], 0, i * ft.getHeight(), 20);  } } private void drawinfo(Graphics g) {  g.setColor(0xffffff);  g.setFont(ft);  for (int i = 0; i < info.length; i++) {   g.drawString(info[i], 0, i * ft.getHeight(), 20);  } } public void drawmenu(Graphics g) {  g.setColor(0x0000ff);  g.setFont(ft);  for (int i = 0; i < smenu.length; i++) {   g.drawString(smenu[i], width / 2, height / 2 + i * ft.getHeight()     - 50, Graphics.HCENTER | Graphics.TOP);  }  g.setColor(0xff0000);  g.drawRect(width / 2 - 50, height / 2 + n * ft.getHeight() - 50, 100,    ft.getHeight()); } public String[] format(String text, int maxWidth, Font ft) {// 字符串切割,实现字符串自动换行  String[] result = null;  Vector tempR = new Vector();  int lines = 0;  int len = text.length();  int index0 = 0;  int index1 = 0;  boolean wrap;  while (true) {   int widthes = 0;   wrap = false;   for (index0 = index1; index1 < len; index1++) {    if (text.charAt(index1) == '\n') {     index1++;     wrap = true;     break;    }    widthes = ft.charWidth(text.charAt(index1)) + widthes;    if (widthes > maxWidth) {     break;    }   }   lines++;   if (wrap) {    tempR.addElement(text.substring(index0, index1 - 1));   } else {    tempR.addElement(text.substring(index0, index1));   }   if (index1 >= len) {    break;   }  }  result = new String[lines];  tempR.copyInto(result);  return result; } protected void keyPressed(int arg0) {  repaint();  switch (this.getGameAction(arg0)) {  case FIRE:   switch (zt) {   case MENU:    switch (n) {    case 0:     // 新游戏没写     break;    case 1:     switchZ(INFO);     break;    case 2:     switchZ(HELP);     break;    case 3:     switchZ(EXIT);     break;    }    break;   case INFO:    switchZ(MENU);    break;   case HELP:    switchZ(MENU);    break;   case EXIT:    switch (m) {    case 0:     switchZ(MENU);     break;    case 1:     MenuMIDlet.inc.notifyDestroyed();     break;    }   }   break;  case UP:   switch (zt) {   case MENU:    n--;    if (n < 0) {     n = 3;    }    break;   }   break;  case DOWN:   switch (zt) {   case MENU:    n++;    if (n > 3) {     n = 0;    }    break;   }   break;  case LEFT:   switch (zt) {   case EXIT:    m++;    if (m > 1) {     m = 0;    }    break;   }   break;  case RIGHT:   switch (zt) {   case EXIT:    m--;    if (m < 0) {     m = 1;    }    break;   }   break;  } }}