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

📄 mycanvas.java

📁 自己写的一个简单的实现了排行榜的J2ME程序
💻 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 + -