/*总感觉手机上的记事本不好用,要记点隐私的都不行,于是乎就实践一把J2ME,自己写个记事本,主要是带加密功能的。。。。把课本上的东西几乎都涵盖进去了。。。本身没什么技术含量,把commandAction方法的逻辑能清楚就OK了。。。
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Window;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.util.*;
import javax.microedition.io.file.*;
import java.io.*;
import javax.microedition.io.*;
import javax.microedition.rms.* ;
/**
* @author mant
*/
public class myNote extends MIDlet implements CommandListener{
private Display display;
//Form fPassword;
List list;
String selectTitle="";
int[] ids ;
//private TextBox tb=new TextBox("编辑","",100000,TextField.ANY);
noteSave ns=new noteSave();
Form f;
TextField tfTitle;
TextBox tfRecData;
TextBox tbModify;
Alert alert;
Form frmInfo;
Form fPassword;
passwordSave ps=new passwordSave();
String password;
TextField tfpassword;
int flag=0;
public myNote()
{
display = Display.getDisplay(this);
tfpassword=new TextField("","",20,TextField.ANY);
password=ps.getPassword();
if(password.equals("nopassword"))
{
// fPassword.append("你还没有设置密码!");
flag=1;
tfpassword.setLabel("设置密码");
}
else
{
tfpassword.setLabel("输入密码");
}
}
public void run()
{
list=new List("所有记录",Choice.IMPLICIT);
Ticker tk=new Ticker("Miss U...Everyday :)");
list.setTicker(tk);
Command cmd_Exit = new Command("Exit",Command.EXIT,1);
Command cmd_Add=new Command("添加",Command.OK,1);
Command cmd_Change = new Command("查看",Command.OK,1);
Command cmd_Delete=new Command("删除",Command.OK,1);
Command cmd_Info=new Command("信息",Command.OK,1);
list.setSelectCommand(cmd_Add);
list.addCommand(cmd_Exit);
list.addCommand(cmd_Change);
list.addCommand(cmd_Delete);
list.addCommand(cmd_Info);
list.setCommandListener(this);
this.readAll();
display.setCurrent(list);
}
public void startApp() {
fPassword=new Form("登录");
Command c=new Command("OK",Command.OK,1);
Command cexit=new Command("Exit",Command.EXIT,1);
fPassword.append(tfpassword);
fPassword.addCommand(c);
fPassword.addCommand(cexit);
fPassword.setCommandListener(this);
display.setCurrent(fPassword);
}
private void readAll() {
list.deleteAll();
try {
RecordStore rs = RecordStore.openRecordStore("DB", true);
if(rs != null ) {
RecordEnumeration re = rs.enumerateRecords(null, null, false);
//首先获得记录ID的数组
ids = new int[re.numRecords()];
int i = 0;
while(re.hasNextElement()) {
ids[i++] = re.nextRecordId();
}
//获得记录的值
re.reset();
i = 0;
while(re.hasNextElement() ){
byte[] data = re.nextRecord();
ns.readCode(data);
if (data != null) {
StringBuffer sb = new StringBuffer();
//添加记录ID
//sb.append("[" + ids[i++] + "] ");
sb.append(ns.noteTitle);
//添加到List中
list.append(sb.toString(), null);
System.out.println(sb);
}
}
} else {
System.out.println( "没有记录" );
}
rs.closeRecordStore();
} catch (Exception e) {
System.out.println(e);
}
}
public void commandAction(Command c,Displayable s){
String cmd = c.getLabel();
String title="";
if(cmd.equals("继续"))
{
tfRecData = new TextBox("日记","",100000,TextField.ANY);
Command c1 = new Command("确定",Command.EXIT,1);
Command c2 = new Command("退出",Command.BACK,1);
tfRecData.addCommand(c1);
tfRecData.addCommand(c2);
tfRecData.setCommandListener(this);
display.setCurrent(tfRecData);
}
else if (cmd.equals("添加")){
f=new Form("添加记录");
//f.
tfTitle=new TextField("记录名","",20,TextField.ANY);
tfRecData = new TextBox("日记","",100000,TextField.ANY);
f.append("记录数据");
f.append(tfTitle);
Command cc = new Command("继续",Command.EXIT,1);
Command ccc=new Command("退出",Command.BACK,1);
// tfRecData.addCommand(c1);
f.addCommand(cc);
f.addCommand(ccc);
f.setCommandListener(this);
//tfRecData.setCommandListener(this);
display.setCurrent(f);
}
else if(cmd.equals("确定"))
{
if(c.getCommandType()==Command.EXIT)
{
//this.add();
this.save(tfRecData.getString(),tfTitle.getString());
this.readAll();
}
else if(c.getCommandType()==Command.BACK)
{
this.modify();
this.readAll();
}
else if(c.getCommandType()==Command.HELP)
{
//System.out.print("delete");
this.delete();
this.readAll();
}
display.setCurrent(list);
}
else if(cmd.equals("查看"))
{
// String index=Integer.toString(ids[list.getSelectedIndex()]) ;
int indexInt=ids[list.getSelectedIndex()];
title="查看记录"+":"+list.getString(list.getSelectedIndex());
tbModify=new TextBox(title,"",100000,TextField.ANY);
tbModify.setString(this.read(indexInt));
Command cmd_OK=new Command("确定",Command.BACK,1);
Command cmdext=new Command("退出",Command.BACK,1);
tbModify.addCommand(cmd_OK);
tbModify.addCommand(cmdext);
tbModify.setCommandListener(this);
display.setCurrent(tbModify);
}
else if(cmd.equals("删除"))
{
Command al_EXIT=new Command("退出",Command.CANCEL,1);
Command al_OK=new Command("确定",Command.HELP,1);
// String index=Integer.toString(ids[list.getSelectedIndex()]);
title="删除记录"+":"+list.getString(list.getSelectedIndex());
alert=new Alert(title);
alert.setType(AlertType.WARNING);
//alert.setTimeout(Alert.);
alert.addCommand(Alert.DISMISS_COMMAND);
alert.addCommand(al_OK);
alert.addCommand(al_EXIT);
alert.setString("下面将要"+title+""n"+""n是否继续?");
alert.setCommandListener(this);
display.setCurrent(alert);
}
else if(cmd.equals("信息"))
{
this.showInfo();
}
else if(cmd.equals("退出"))
{
list.setCommandListener(this);
display.setCurrent(list);
}
else if(cmd.equals("Exit"))
{
this.exitMIDlet();
}
else if(cmd.equals("OK"))
{
if(flag==1)
{
ps.setPassword(tfpassword.getString());
this.run();
}
else if(flag==0)
{
if(password.equals(tfpassword.getString()))
{
this.run();
}
else
{
tfpassword.setLabel("密码错误");
}
}
}
}
public void save(String str,String title)
{
RecordStore rs=noteSave.openRSAnyway("DB");
noteSave ns=new noteSave();
ns.noteTitle=title;
ns.noteString=str;
byte tmp[] = ns.insertCode();
try
{
rs.addRecord(tmp,0,tmp.length) ;
rs.closeRecordStore();
}
catch(Exception e)
{
System.out.print(e.toString());
}
}
public String read(int index)
{
String str="";
RecordStore rs=noteSave.openRSAnyway("DB");
noteSave ns=new noteSave();
try
{
byte tmp[] = rs.getRecord(index);
ns.readCode(tmp);
str=ns.noteString;
rs.closeRecordStore();
}
catch(Exception e)
{
return null;
}
return str;
//
}
private void modify() {
try {
RecordStore rs = RecordStore.openRecordStore("DB", true);
String title = tbModify.getTitle();
int pos = title.indexOf(":");
int id = Integer.parseInt(title.substring(pos+1));
byte[] data =rs.getRecord(id);
ns.readCode(data);
ns.noteString=tbModify.getString();
data=ns.insertCode();
//RecordStore rs = RecordStore.openRecordStore("DB", true);
//添加记录监听器
//rs.addRecordListener(new MyRecordListener());
if( rs != null ) {
rs.setRecord(id, data, 0, data.length);
}
rs.closeRecordStore();
} catch (Exception e) {
System.out.println(e);
}
}
private void delete() {
//String title = alert.getTitle();
//int pos = title.indexOf(":");
int id =ids[list.getSelectedIndex()];
//System.out.print("delete");
try {
RecordStore rs = RecordStore.openRecordStore("DB", true);
//添加记录监听器
// rs.addRecordListener(new MyRecordListener());
if( rs != null ) {
rs.deleteRecord(id);
}
rs.closeRecordStore();
}catch (Exception e) {
System.out.println(e);
}
}
private void showInfo()
{
frmInfo = new Form("显示记录存储信息");
Command cmdBack=new Command("退出",Command.CANCEL,1);
frmInfo.addCommand(cmdBack);
frmInfo.setCommandListener(this);
try {
RecordStore rs = RecordStore.openRecordStore( "DB", true);
int recNums = rs.getNumRecords();
frmInfo.append("总记录数:" + recNums +""n");
frmInfo.append("可利用空间:" + rs.getSizeAvailable() + ""n");
frmInfo.append("下一个记录ID:" + rs.getNextRecordID() + ""n");
frmInfo.append("版本:" + rs.getVersion() + ""n");
} catch (Exception e) {
System.out.println(e);
}
display.setCurrent(frmInfo);
}
public void pauseApp() {
}
public void exitMIDlet(){
try{
destroyApp(false);
notifyDestroyed();
}catch(Exception ex){
ex.printStackTrace();
}
}
public void destroyApp(boolean unconditional) {
}
}
===================================================================================
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Window;
import java.io.*;
import javax.microedition.io.*;
import javax.microedition.rms.* ;
/**
*
* @author mant
*/
public class noteSave
{
String noteTitle;
String noteString;
public byte[] insertCode()
{
byte[] result = null ;
try
{
ByteArrayOutputStream bos =
new ByteArrayOutputStream() ;
DataOutputStream dos = new DataOutputStream (bos) ;
dos.writeUTF(noteTitle) ;
dos.writeUTF(noteString) ;
result = bos.toByteArray() ;
dos.close() ;
bos.close() ;
}catch(Exception e)
{
}
return result ;
}
public void readCode(byte[] data)
{
try
{
ByteArrayInputStream bis =
new ByteArrayInputStream(data) ;
DataInputStream dis = new DataInputStream (bis) ;
noteTitle = dis.readUTF() ;
noteString = dis.readUTF() ;
dis.close() ;
bis.close() ;
}catch(Exception e)
{
}
}
public static RecordStore openRSAnyway(String rsname)
{
RecordStore rs = null ;
//名称大于32个字符就不接受
if(rsname.length() > 32)
return null ;
try
{
rs = RecordStore.openRecordStore(rsname,true) ;
return rs ;
}catch(Exception e)
{
return null ;
}
}
}
=====================================================================================
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Window;
import javax.microedition.rms.* ;
import java.io.*;
import javax.microedition.io.*;
import javax.microedition.io.file.*;
/**
*
* @author mant
*/
public class passwordSave {
RecordStore rs;
public passwordSave()
{
this.openRSAnyway("password");
}
public String getPassword()
{
String str="";
//byte[] data=rs.getRecord(1);
try
{
ByteArrayInputStream bis =
new ByteArrayInputStream(rs.getRecord(1)) ;
DataInputStream dis = new DataInputStream (bis) ;
str = dis.readUTF() ;
//noteString = dis.readUTF() ;
dis.close() ;
bis.close() ;
}catch(Exception e)
{
return str="nopassword";
}
return str;
}
public void setPassword(String password)
{
byte[] data = null ;
try
{
ByteArrayOutputStream bos =
new ByteArrayOutputStream() ;
DataOutputStream dos = new DataOutputStream (bos) ;
dos.writeUTF(password) ;
//dos.writeUTF(noteString) ;
data = bos.toByteArray() ;
dos.close() ;
bos.close() ;
rs.addRecord( data, 0, data.length);
}catch(Exception e)
{
}
// return result;
}
public void openRSAnyway(String rsname)
{
// RecordStore rs = null ;
//名称大于32个字符就不接受
if(rsname.length() > 32)
return;
try
{
rs = RecordStore.openRecordStore(rsname,true) ;
// return rs ;
}catch(Exception e)
{
return ;
}
}
}