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

📄 mappinmanager.java

📁 基于J2ME的手机地图客户端源码
💻 JAVA
字号:
package org.sreid.j2me.gmapviewer;import java.util.*;import javax.microedition.rms.*;import javax.microedition.lcdui.*;import javax.microedition.io.*;import org.sreid.j2me.util.*;// Handles permanent map pins, and temporary search result map pins.class MapPinManager {	private static final String RECORD_STORE_NAME = "GMapViewer.mappins";	private final GMapViewer app;	private RecordStore rms;	private final Vector mapPins = new Vector();	MapPinManager(GMapViewer app) {		this.app = app;	}	void openRMS() {		try {			rms = RecordStore.openRecordStore(RECORD_STORE_NAME, true);			RecordEnumeration re = rms.enumerateRecords(null, null, false);			mapPins.removeAllElements();			byte[] buffer = new byte[500];			while (re.hasNextElement()) {				int id = re.nextRecordId();				try {					int rlen = rms.getRecord(id, buffer, 0);					MapPin mp = new MapPin(buffer, 0, rlen);					mp.rmsID = id;					mapPins.addElement(mp);				}				catch (Exception e) {					app.exception("An error occured while reading a map pin from RMS.", e);					rms.deleteRecord(id);				}			}		}		catch (Exception e) {			app.exception("An error occured while enumerating map pin RMS.", e);		}	}	void closeRMS() {		try {			rms.closeRecordStore();		}		catch (Exception e) {			app.exception("An error occured while closing map pin RMS.", e);		}	}	/** Call this whenever a pin changes. */	void keepPin(MapPin pin) {		if (!mapPins.contains(pin)) {			mapPins.addElement(pin);			sortPinsNearestFirst();		}		if (pin.isPermanent) {			try {				byte[] buffer = new byte[500];				int rlen = pin.toBytes(buffer, 0);				if (pin.rmsID == -1) {					pin.rmsID = rms.addRecord(buffer, 0, rlen);				}				else {					rms.setRecord(pin.rmsID, buffer, 0, rlen);				}			}			catch (Exception e) {				app.exception("An error occured while saving a map pin to RMS.", e);			}		}	}	void deletePin(MapPin pin) {		mapPins.removeElement(pin);		if (pin.rmsID != -1) {			try {				rms.deleteRecord(pin.rmsID);			}			catch (Exception e) {				app.exception("An error occured while deleting a map pin from RMS.", e);			}			finally {				pin.rmsID = -1;			}		}	}	void deleteNonPermanentPins() {		for (int i = mapPins.size() - 1; i >= 0; i--) {			if (!getMapPin(i).isPermanent) mapPins.removeElementAt(i);		}	}	void sortPinsNearestFirst() {		final int x = app.canvas.getX();		final int y = app.canvas.getY();		// Copy to temporary array		Object[] array = new Object[mapPins.size()];		mapPins.copyInto(array);		// Sort temporary array		Sort.sort(array, new Comparator() {			public int compare(Object o1, Object o2) {				MapPin p1 = (MapPin)o1;				MapPin p2 = (MapPin)o2;				if (p1.isPermanent && p2.isPermanent) {					// Sort permanent pins by distance from current position.					// Pythagorean theorem. Using longs here because distance^2 may be large.					long xd1 = Math.abs(p1.x - x);					long yd1 = Math.abs(p1.y - y);					long d1 = (xd1 * xd1) + (yd1 * yd1);					long xd2 = Math.abs(p2.x - x);					long yd2 = Math.abs(p2.y - y);					long d2 = (xd2 * xd2) + (yd2 * yd2);					if (d1 < d2) return -1;					if (d1 > d2) return 1;					return 0;				}				else {					// Search pins should not have their order changed.					if (p1.isPermanent && !p2.isPermanent) return 1;					if (!p1.isPermanent && p2.isPermanent) return -1;					return 0; // both non-permanent, preserve order (requires a stable sort)				}			}		});		// Copy back to Vector		for (int i = 0; i < array.length; i++) {			mapPins.setElementAt(array[i], i);		}			}	Enumeration enumeration() {		return mapPins.elements();	}	MapPin getMapPin(int index) {		return (MapPin)mapPins.elementAt(index);	}	int getMapPinCount() {		return mapPins.size();	}}

⌨️ 快捷键说明

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