⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 converter.java

📁 demo for java
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/* * * Copyright 2004 FlashMan.Ncuhome.com Inc. All Rights Reserved. * * 我的第一个J2ME程序习作 * 用于在支持J2ME以及MIDP1.0的手机上进行不同货币单位的汇率换算(PS:其实是用于友人的作业) * 本程序共有3个类,其中2个功能类 * Math类用来处理浮点数的四则运算 * MyInput类生成输入框,为的是更方便的输入数值. * * 本例中我有两个问题 *   1.List组件的setSelectedIndex(int elementNum,boolean selected)方法为何不能将 *     光标定位在指定的列上 *   2.在这个程序中我自定义了一个输入框类,能不能用不太麻烦的方法使它能像系统自带 *     的输入框一样支持光标显示 * * 而且还有好些不足之处 *   1.用户不可以自已添加/删除货币单位及汇率,仅能通过联网更新 *   2.从菜单中选择Restore Rate时不经用户确认就将数据库复位 *   3.代码不够优化(比如:用了太多的Command对象引用) * * 有一点需要提醒一下的是通过联网更新汇率的方法只在Jbuilder9自带的J2ME Wireless Toolkit 1.0 * 能正常连网,如果是J2ME Wireless Toolkit 2.1的SDK就会发现点enter准备更新的时候它会"善意"的告诉 * 你程序想要访问网络,这将会产生某些费用,然后给你两个选择Yes/No.再然后你就会发现它已经死掉了,不论 * 你选择的是YesOrNo.我相信这是模拟器自身的问题.所以我想最好还是安安心心的用Toolkit 1.0SDK进行调试吧 * * 有任何建议和意见请发邮件至itfeihu@163.com * 也可通过我的早期作品闪狐超酷Flash留言板给我留言 flashbook.ncuhome.com * 同时欢迎访问我的个人主页 flashman.ncuhome.com * 当然也欢迎访问我们的校园网站"南昌大学家园网" * *  *                                                                      狐狸 *                                                                    2004-6-9 */import javax.microedition.midlet.*;import javax.microedition.lcdui.*;import javax.microedition.rms.*;import javax.microedition.io.*;import java.io.*;public class Converter    extends MIDlet    implements CommandListener {  String dbName = "Converter"; //数据库名  String CurrencyName[]; //用于存放货币单位的数组  String Rate[][]; //用于存放货币之间的交叉汇率  String money_s = "0"; //存放源货币值  String money_t = "0"; //存放目标货币值  int source = 0; //源货币单位在数组中的位置  int object = 0; //目标货币单位在数组中的位置  int selected = 0; //当前选择的菜单项位置  String updateURL; //更新汇率的网址  Alert alert = new Alert("Alert"); //用于提示信息的Alert  Display display; //屏幕对象  MyInput myInput; //自定义的输入框  Math math = new Math(); //浮点运算对象  public Converter() {    alert.setType(AlertType.WARNING); //设置alert的类型    alert.setTimeout(3000); //alert的显示时间    display = Display.getDisplay(this); //获得对屏幕控制的引用  }  public void startApp() {    openDb(); //从数据库中获取汇率和恢复上一次正常退出时的状态    main(); //运行界面    renewVar(); //更新所有的变量状态  }  public void pauseApp() {}  public void destroyApp(boolean unconditional) {}  List list; //定义一个List组件用于显示选单  Command cmdExit; //定义一个Command按纽组件  void main() {    cmdExit = new Command("Exit", Command.EXIT, 0); //生成Command对象(显示内容,按纽型态,显示优先级)    list = new List("Rate Converter", Choice.IMPLICIT); //生成List(主选单)(标题,型态[单选])    //添入各个选单    list.append("From " + CurrencyName[source], null);    list.append("To " + CurrencyName[object], null);    list.append("Rate 1:" + Rate[source][object], null);    list.append("Valuta:" + money_s, null);    list.append("Result:" + money_t, null);    //添入系统选单    list.addCommand(cmdExit);    list.addCommand(new Command("Update rate", Command.SCREEN, 0));    list.addCommand(new Command("Restore rate", Command.SCREEN, 0));    list.addCommand(new Command("About", Command.SCREEN, 0));    list.setCommandListener(this); //设置事件监听    list.setSelectedIndex(selected, true);    //设置光标定位在上次操作选定的选单    //但不知为何就是不行,明明是说设成true的,这是我的问题之一    display.setCurrent(list); //显示内容  }  //选择源货币单位  List sourceList;  Command sourceEnter;  Command sourceCancel;  void SelectSource() {    sourceList = new List("Choose Source", Choice.EXCLUSIVE);    sourceEnter = new Command("Enter", Command.OK, 0);    sourceCancel = new Command("Cancel", Command.CANCEL, 1);    for (int I = 0; I < CurrencyName.length; I++) { //将货币单位全部添至选单      sourceList.append(CurrencyName[I], null); //null这个位置的参数可以用来显示图像    }    //添加系统选单及设置事件监听    sourceList.addCommand(sourceEnter);    sourceList.addCommand(sourceCancel);    sourceList.setCommandListener(this);    sourceList.setSelectedIndex(source, true);    //设置光标定位在上次操作选定的选单,但和前面一样无效    display.setCurrent(sourceList);  }  //选择目标货币单位  List objectList;  Command objectEnter;  Command objectCancel;  void SelectObject() {    //同上    objectList = new List("Choose Object", Choice.EXCLUSIVE);    objectEnter = new Command("Enter", Command.OK, 0);    objectCancel = new Command("Cancel", Command.CANCEL, 1);    for (int I = 0; I < CurrencyName.length; I++) {      objectList.append(CurrencyName[I], null);    }    objectList.addCommand(objectEnter);    objectList.addCommand(objectCancel);    objectList.setCommandListener(this);    objectList.setSelectedIndex(object, true);    //设置光标定位在上次操作选定的选单,照样无效    display.setCurrent(objectList);  }  Command setRateEnter;  Command setRateCancel;  void setRate() { //修改汇率    myInput = new MyInput(34, 53, Rate[source][object]); //在x:34,y:53的位置显示输入框,并传递原汇率值    setRateEnter = new Command("Enter", Command.OK, 0);    myInput.addCommand(setRateEnter);    setRateCancel = new Command("Cancel", Command.CANCEL, 1);    myInput.addCommand(setRateCancel);    display.setCurrent(myInput);    myInput.setCommandListener(this);  }  Command inputEnter;  Command inputCancel;  void inputMoney() { //输入货币金额    myInput = new MyInput(34, 69); //指定位置显示一个空白的输入框    inputEnter = new Command("Enter", Command.OK, 0);    myInput.addCommand(inputEnter);    inputCancel = new Command("Cancel", Command.CANCEL, 1);    myInput.addCommand(inputCancel);    display.setCurrent(myInput);    myInput.setCommandListener(this);  }  Command reverseEnter;  Command reverseCancel;  void reverseMoney() { //反向金额输入    myInput = new MyInput(33, 85); //指定位置显示一个空白的输入框    reverseEnter = new Command("Enter", Command.OK, 0);    myInput.addCommand(reverseEnter);    reverseCancel = new Command("Cancel", Command.CANCEL, 1);    myInput.addCommand(reverseCancel);    display.setCurrent(myInput);    myInput.setCommandListener(this);  }  TextField input;  Command updateEnter;  Command updateCancel;  void updateRate() { //连网更新数据    Form form = new Form("Update rate");    updateEnter = new Command("Enter", Command.OK, 0);    form.addCommand(updateEnter);    updateCancel = new Command("Cancel", Command.CANCEL, 0);    form.addCommand(updateCancel);    input = new TextField("Update's URL:", updateURL, 100, TextField.URL);    form.append(input);    form.setCommandListener(this);    display.setCurrent(form);  }  public void commandAction(Command c, Displayable s) { //用于响应所有的操作事件    if (c.getLabel() == "Restore rate") { //初始化数据库      dbInitialize();      startApp();      return;    }    if (c.getLabel() == "Update rate") { //汇率更新界面      updateRate();      return;    }    if (c.getLabel() == "About") { //汇率更新界面      alert.setString("Copyright(c)2004 FlashMan.Ncuhome.Com"); //提示无效的URL链接或无效的数据页      alert.setTimeout(6000);      display.setCurrent(alert);      alert.setTimeout(3000);      return;    }    if (c == updateEnter) { //汇率主更新程序(汇率更新界面)      StartUpdate();      return;    }    if (c == updateCancel) { //取消更新(汇率更新界面)      main();      return;    }    if (c == sourceEnter) { //源货币单位选择      source = sourceList.getSelectedIndex();      money_t = math.Multiplication(money_s, Rate[source][object]); //计算货币单位变更后的转换结果      main();      return;    }    if (c == sourceCancel) { //取消选择源货币(源货币单位选择界面)      main();      return;    }    if (c == objectEnter) { //目标币单位选择      object = objectList.getSelectedIndex();      money_t = math.Multiplication(money_s, Rate[source][object]); //计算货币单位变更后的转换结果      main();      return;    }    if (c == objectCancel) { //取消选择目标货币(源货币单位选择界面)      main();      return;    }    if (c == cmdExit) { //正常退出      saveDb(); //将各变量状态保存至数据库      notifyDestroyed();      return;    }    if (c == inputEnter) { //转换值输入确定时      money_s = myInput.value.toString();      if (money_s.length() < 1) {        money_s = "0";      }      money_t = math.Multiplication(money_s, Rate[source][object]); //计算转换结果      main();      return;    }    if (c == inputCancel) { //取消输入时      main();      return;    }    if (c == reverseEnter) { //在结果中输入确定时      money_t = myInput.value.toString();      if (money_s.length() < 1) {        money_s = "0";      }      money_s = math.Division(money_t, Rate[source][object]); //计算转换结果      main();      return;    }    if (c == reverseCancel) { //取消输入时      main();      return;    }    if (c == setRateEnter) { //设定已选定的源/目标货币之间的汇率      if (CurrencyName[source] != CurrencyName[object]) {        ; //源货币不等于目标货币则进行下列更新操作        Rate[source][object] = myInput.value.toString(); //更新汇率        Rate[object][source] = math.Division("1", Rate[source][object]); //反向更新汇率        money_t = math.Multiplication(money_s, Rate[source][object]); //更新结果      }      main();      return;    }    if (c == setRateCancel) { //取消汇率设定      main();      return;    }    switch (list.getSelectedIndex()) { //根据选定的选单进行相应的操作      case 0:        selected = 0;        SelectSource(); //选择源货币单位        break;      case 1:        selected = 1;        SelectObject(); //选择目标货币单位        break;      case 2:        selected = 2;        setRate(); //设定汇率        break;      case 3:        selected = 3;        inputMoney(); //输入转换值        break;      case 4:        selected = 4;        reverseMoney(); //反向转换输入值        break;    }  }  void openDb() { //从数据库中获取汇率和恢复上一次正常退出时的状态    try {      RecordStore rs = RecordStore.openRecordStore(dbName, false);      /*       定义数据库的引用对象       第二个参数如果是true代表如果指定的数据库不存在,则系统将自动建立一个新的数据库       反之则抛出RecordStoreNotFoundException异常       */      byte bytes[];      String str;      bytes = rs.getRecord(1); //取出第一行记录,本程序将其设置的是货币单位      str = new String(bytes, 0, bytes.length); //将取出的bytes型数据转成字符型      str = str.trim(); //剔除空行      CurrencyName = newArray(str, ","); //更新一维数组变量CurrencyName      bytes = rs.getRecord(2); //同上,汇率      str = new String(bytes, 0, bytes.length);      str = str.trim();      Rate = newArrayPlanar(str, "|", ","); //更新二维数组变量Rate      bytes = rs.getRecord(3); //同上,程序状态      str = new String(bytes, 0, bytes.length);      str = str.trim();      /*更新最后一次正常退出时的程序状态,如:              str="50,413.5,1,2,0,http://localhost/rate.asp"              需将其转换成数组       */      String tmpArray[] = newArray(str, ",");      money_s = tmpArray[0];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -