📄 mycanvas.java
字号:
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.rms.InvalidRecordIDException;
import javax.microedition.rms.RecordComparator;
import javax.microedition.rms.RecordEnumeration;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;
import javax.microedition.rms.RecordStoreFullException;
import javax.microedition.rms.RecordStoreNotFoundException;
import javax.microedition.rms.RecordStoreNotOpenException;
public class MyCanvas extends Canvas implements CommandListener {
private RecordStore rs;
private DataOutputStream dos = null;
private ByteArrayOutputStream baos = null;
private DataInputStream dis = null;
private ByteArrayInputStream bais = null;
private Command updateCmd;
private Command clearCmd;
private Command exitCmd;
private RecordEnumeration re;
private RecordComparator rc;
// private Random rmd;
private GameRecords gr;
public MyCanvas(GameRecords gr) {
this.gr = gr;
updateCmd = new Command("更新记录", Command.SCREEN, 1);
clearCmd = new Command("清空记录", Command.CANCEL, 2);
exitCmd = new Command("退出", Command.EXIT, 0);
// rmd = new Random();
addCommand(updateCmd);
addCommand(clearCmd);
addCommand(exitCmd);
setCommandListener(this);
rc = new RecordComparator() {
public int compare(byte[] rec1, byte[] rec2) {
DataInputStream r1 = new DataInputStream(
new ByteArrayInputStream(rec1));
DataInputStream r2 = new DataInputStream(
new ByteArrayInputStream(rec2));
try {
String name1 = r1.readUTF();
int record1 = r1.readInt();
String name2 = r2.readUTF();
int record2 = r2.readInt();
r1.close();
r2.close();
if (record1 != record2) {
return record1 > record2 ? RecordComparator.PRECEDES
: RecordComparator.FOLLOWS;
}
int comp = name1.compareTo(name2);
if (comp == 0) {
return RecordComparator.EQUIVALENT;
} else if (comp < 0) {
return RecordComparator.PRECEDES;
} else {
return RecordComparator.FOLLOWS;
}
} catch (IOException e) {
return RecordComparator.EQUIVALENT;
}
}
};
}
// paint
protected void paint(Graphics g) {
try {
// Open recordstore
rs = RecordStore.openRecordStore("gamerecord", true);
re = rs.enumerateRecords(null, rc, true);
// Clear screen
g.setColor(0xffffffff);
g.fillRect(0, 0, getWidth(), getHeight());
// Draw title
g.setColor(0xffff0000);
g.fillRect(0, 0, getWidth(), 20);
Font f = Font.getDefaultFont();
int w = f.charWidth('排');
g.setColor(0xff0000ff);
g.drawString("排行榜", (getWidth()-w*3)/2, 3, 20);
g.drawString(" Name", 0, 22, 20);
g.drawString("Score", getWidth()-33, 22, 20);
// Draw records
int x = 0;
int y = 38;
g.setColor(0xff000000);
while (re.hasNextElement()) {
bais = new ByteArrayInputStream(re.nextRecord());
dis = new DataInputStream(bais);
String player_name = dis.readUTF();
int player_record = dis.readInt();
g.drawString(player_name, x, y, 20);
g.drawString(" "+String.valueOf(player_record), getWidth() - 20, y,
20);
y += 14;
}
} catch (RecordStoreFullException e) {
e.printStackTrace();
} catch (RecordStoreNotFoundException e) {
e.printStackTrace();
} catch (RecordStoreException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
rs.closeRecordStore();
if(bais!=null){
dis.close();
bais.close();
}
} catch (IOException e) {
e.printStackTrace();
} catch (RecordStoreNotOpenException e) {
e.printStackTrace();
} catch (RecordStoreException e) {
e.printStackTrace();
}
}
}
// Add new records
public void addRecord(player p) {
try {
rs = RecordStore.openRecordStore("gamerecord", true);
} catch (RecordStoreFullException e1) {
e1.printStackTrace();
} catch (RecordStoreNotFoundException e1) {
e1.printStackTrace();
} catch (RecordStoreException e1) {
e1.printStackTrace();
}
baos = new ByteArrayOutputStream();
dos = new DataOutputStream(baos);
try {
dos.writeUTF(p.getName());
dos.writeInt(p.getRecord());
dos.close();
byte[] data = baos.toByteArray();
baos.close();
int num = re.numRecords();
if (num >= 10) {
if (readRecord(num) < p.getRecord())
rs.setRecord(num, data, 0, data.length);
} else {
rs.addRecord(data, 0, data.length);
}
} catch (IOException e) {
e.printStackTrace();
} catch (RecordStoreNotOpenException e) {
e.printStackTrace();
} catch (InvalidRecordIDException e) {
e.printStackTrace();
} catch (RecordStoreFullException e) {
e.printStackTrace();
} catch (RecordStoreException e) {
e.printStackTrace();
}finally{
try {
rs.closeRecordStore();
} catch (RecordStoreNotOpenException e) {
e.printStackTrace();
} catch (RecordStoreException e) {
e.printStackTrace();
}
}
}
//
public int readRecord(int id) throws InvalidRecordIDException,
RecordStoreNotOpenException, RecordStoreException, IOException {
if(re.numRecords()!=10){
bais = new ByteArrayInputStream(re.nextRecord());
dis = new DataInputStream(bais);
dis.readUTF();
int num = dis.readInt();
dis.close();
bais.close();
return num;
}else{
return 0;
}
}
// 按键处理
public void commandAction(Command c, Displayable d) {
if (c == updateCmd) {
// player p = new player("A",rmd.nextInt(100));
// addRecord(p);
gr.tf.setString("");
gr.dis.setCurrent(gr.f);
gr.record = (gr.rmd.nextInt()>>>1)%101;
if(gr.f.size()==2)
gr.f.delete(1);
gr.f.append(" New Record: "+gr.record);
}
if (c == clearCmd) {
try {
RecordStore.deleteRecordStore("gamerecord");
re.destroy();
} catch (RecordStoreNotFoundException e) {
e.printStackTrace();
} catch (RecordStoreException e) {
e.printStackTrace();
}
}
if (c == exitCmd) {
gr.destroyApp(true);
gr.notifyDestroyed();
}
// Update to screen
repaint();
}
}
class player {
private String name;
private int record;
public player(String n, int r) {
name = n;
record = r;
}
public String getName() {
return name;
}
public int getRecord() {
return record;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -