j2me

[color=darkred] [/color]
Duas agendas, uma para compromissos pessoais e outra para
compromissos profissionais. Deve haver uma escolha no Midlet
para qual agenda o usuário deseja acessar

sim…nao entendi…vc ta usnado o netbeans?
se sim entao vc tem que clicar nas propriedades do projeto e definir outra Midlet e assim por diante…ou fazer uma midlet que chame as outras…tipo uma aplicação que tenha menu para “subaplicações”…é isso?

se nao…explica melhor essa sua duvida…espero ter ajudado :wink:

[quote=abelgomes]sim…nao entendi…vc ta usnado o netbeans?
se sim entao vc tem que clicar nas propriedades do projeto e definir outra Midlet e assim por diante…ou fazer uma midlet que chame as outras…tipo uma aplicação que tenha menu para “subaplicações”…é isso?

se nao…explica melhor essa sua duvida…espero ter ajudado ;)[/quote]

O código é este:
import javax.microedition.midlet.;
import javax.microedition.lcdui.
;
import javax.microedition.rms.*;

import java.util.*;

public class RmsAgenda extends MIDlet implements CommandListener
{
Command addCmd = new Command(“Novo Contato”, Command.SCREEN, 1);
Command selectCmd = new Command(“Visualizar”, Command.ITEM, 1);
Command exitCmd = new Command(“Sair”, Command.EXIT, 1);

Command saveCmd = new Command("Salvar", Command.SCREEN, 1);
Command deleteCmd = new Command("Remover", Command.SCREEN, 1);
Command cancelCmd = new Command("Cancelar", Command.SCREEN, 1);

Command searchCmd = new Command("Buscar", Command.SCREEN, 1);

List list = new List("Contatos", List.IMPLICIT);
EditForm form = new EditForm();
SearchForm searchForm = new SearchForm();

NameComparator orderby = new NameComparator();
NameFilter nameFilter = new NameFilter(orderby);

private Contact[] currentContactList;

public RmsAgenda()
{
	form.addCommand(saveCmd);
	form.addCommand(cancelCmd);
	form.addCommand(deleteCmd);
	form.setCommandListener(this);

	searchForm.addCommand(searchCmd);
	searchForm.setCommandListener(this);

	list.addCommand(searchCmd);
	list.addCommand(addCmd);
	list.addCommand(exitCmd);
	list.setSelectCommand(selectCmd);
	list.setCommandListener(this);

}

public void startApp()
{
	refreshList();
}

public void pauseApp()
{
}

public void destroyApp(boolean unc)
{
}

private void refreshList()
{
	list.deleteAll();
	currentContactList = Contact.list(orderby, nameFilter);
	for(int ccnt=0; ccnt < currentContactList.length; ccnt++)
	{
		String name = currentContactList[ccnt].firstName;
		list.append(name + " "+currentContactList[ccnt].phoneNumber, null);
	}
	Display.getDisplay(this).setCurrent(list);
}

private void showForm(Contact c)
{
	form.setContact(c);
	Display.getDisplay(this).setCurrent(form);
}

public void commandAction(Command cmd, Displayable d)
{
	if (cmd == exitCmd)
	{
		destroyApp(true);
		notifyDestroyed();
	}
	else if ((d == list) && (cmd == addCmd))
	{
		form.setContact(new Contact());
		Display.getDisplay(this).setCurrent(form);
	}
	else if ((d == form) && (cmd == saveCmd))
	{
		Contact c = form.getContact();
		c.store();
		refreshList();
	}
	else if ((d == list) && (cmd == selectCmd))
	{
		showForm(currentContactList[list.getSelectedIndex()]);
	}
	else if ((d == form) && (cmd == deleteCmd))
	{
		form.getContact().delete();
		refreshList();
	}
	else if ((d == form) && (cmd == deleteCmd))
	{
		refreshList();
	}
	else if ((d == list) && (cmd == searchCmd))
	{
		Display.getDisplay(this).setCurrent(searchForm);
	}
	else if ((d == searchForm) && (cmd == searchCmd))
	{
		nameFilter.criteria = searchForm.getCriteria();
		refreshList();
	} else if ((d == form) && (cmd == cancelCmd))
	{
		refreshList();
	}
}

}

class NameFilter implements RecordFilter
{
String criteria;
NameComparator orderby;

NameFilter(NameComparator orderby)
{
	this.orderby = orderby;
}

public boolean matches(byte[] candidate)
{
	if ((criteria == null) || (criteria.length() == 0))
	{
		return true;
	}
            else
                return new Contact(candidate).firstName.startsWith(criteria);
}

}

class NameComparator implements RecordComparator
{

public int compare(byte[] rec1, byte[] rec2)
{
	Contact c1 = new Contact(rec1);
	Contact c2 = new Contact(rec2);

	String s1 = c1.firstName;
	String s2 = c2.firstName;

	if (s1.compareTo(s2) == 0)
	{
		return RecordComparator.EQUIVALENT;
	}
	else if (s1.compareTo(s2) > 0)
	{
		System.out.println(c1+ " then " + c2);
		return RecordComparator.FOLLOWS;
	}
	else
	{
		System.out.println(c2+ " then " + c1);
		return RecordComparator.PRECEDES;
	}
}

}

class ChangeNotifier implements RecordListener
{
public void recordAdded(RecordStore recordStore, int recordId){
try {
System.out.println("Added a record to “+recordStore.getName() + " id=”+recordId);
} catch (RecordStoreNotOpenException x) {
x.printStackTrace();
}
}

public void recordChanged(RecordStore recordStore, int recordId){
	try {
		System.out.println("Changed a record in "+recordStore.getName() + " id="+recordId);
	} catch (RecordStoreNotOpenException x)	{
		x.printStackTrace();
	}
}

public void recordDeleted(RecordStore recordStore, int recordId){
	try {
		System.out.println("Deleted record from "+recordStore.getName() + " id="+recordId);
	} catch (RecordStoreNotOpenException x)	{
		x.printStackTrace();
	}
}

}

class SearchForm extends Form
{
private TextField searchField = new TextField("Buscar: ", “”, 15, TextField.ANY);

public SearchForm()
{
	super("Criterio de Busca");
	append(searchField);
}

public String getCriteria()
{
	return searchField.getString();
}

}

class EditForm extends Form
{
private Contact contact;
private TextField firstNameFld = new TextField("Nome: ", “”, 15, TextField.ANY);
private TextField lastNameFld = new TextField("Sobrenome: ", “”, 15, TextField.ANY);
private TextField phoneFld = new TextField("Telefone: ", “”, 10, TextField.PHONENUMBER);

public EditForm()
{
	super("Editar Contato");
	append(firstNameFld);
	append(lastNameFld);
	append(phoneFld);
}

public void setContact(Contact c)//envia para a classe conta
{
	contact = c;
	firstNameFld.setString(contact.firstName);
	lastNameFld.setString(contact.lastName);
	phoneFld.setString(contact.phoneNumber);
}

public Contact getContact()//atribui para a classe conta
{
	contact.firstName = firstNameFld.getString();
	contact.lastName = lastNameFld.getString();
	contact.phoneNumber = phoneFld.getString();
	return contact;
}

}

class Contact//cria o arquivo,le,
{
private static final String storeName = “AgendaDB”;

String firstName;
String lastName;
String phoneNumber;
private int id = -1;//uma variavel para armazenar a 
    //posição,ou seja, na hora de ler o registro

public Contact()
{
	id = -1;
}

public Contact(int id)
{
	this.id = id;
}

public Contact(byte[] data)//cria um registro por dados em bytes
{
	populate(data);
}

public static Contact[] list(RecordComparator orderby, RecordFilter nameFilter)
{
	Vector v = new Vector();
	try
	{
		RecordStore rs = RecordStore.openRecordStore(storeName, true);
		RecordEnumeration e = rs.enumerateRecords(nameFilter, orderby, false);
		while (e.hasNextElement())
		{
			int id = e.nextRecordId();
			Contact c = new Contact(id);
			c.populate(rs.getRecord(id));
			v.addElement(c);
		}
		rs.closeRecordStore();
	} catch (RecordStoreException x)
	{
		x.printStackTrace();
		return null;
	}
	Contact[] rtn = new Contact[v.size()];
	v.copyInto(rtn);
	return rtn;
}

public static Contact[] listByLastName()
{
	return null;
}

public static Contact[] list()
{
	return null;
}

public void store()
{
	try
	{
		byte[] data = toBytes();
		RecordStore rs = RecordStore.openRecordStore(storeName, true);
		rs.addRecordListener(new ChangeNotifier());
		if (id < 0)
		{
			rs.addRecord(data, 0, data.length);
		}
		else
		{
			rs.setRecord(id, data, 0, data.length);
		}
		rs.closeRecordStore();
	} catch (RecordStoreException x)
	{
		x.printStackTrace();
	}
}

public void delete()
{
	if (id >= 0)
	{
		try
		{
			RecordStore rs = RecordStore.openRecordStore(storeName, false);
			rs.deleteRecord(id);
			rs.closeRecordStore();
		} catch (RecordStoreException x)
		{
			x.printStackTrace();
		}
	}
	else
	{
		throw new RuntimeException("Invalid record id "+id);
	}
}

private byte[] toBytes()
{
	return toString().getBytes();
}

private void populate(byte[] data)
{

	String s = new String(data);

	int idx = s.indexOf("|");
	firstName = s.substring(0, idx);

	int idx2 = s.indexOf("|", idx+1);
	lastName = s.substring(idx+1, idx2);

	phoneNumber = s.substring(idx2+1);
}

public String toString()
{
	return (firstName + "|" + lastName +"|"+ phoneNumber);
}

}
.Agora tenho que fazer duas agendas, uma para compromissos pessoais e outra para
compromissos profissionais. Deve haver uma escolha no Midlet
para qual agenda o usuário deseja acessar. Um recurso para ler uma agenda localizada em um banco de
dados no servidor, e inserir os dados desta agenda no record
store.Inserir um recurso para remover as agendas

O código é este:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.rms.*;

import java.util.*;

public class RmsAgenda extends MIDlet implements CommandListener
{
Command addCmd = new Command("Novo Contato", Command.SCREEN, 1);
Command selectCmd = new Command("Visualizar", Command.ITEM, 1);
Command exitCmd = new Command("Sair", Command.EXIT, 1);

Command saveCmd = new Command("Salvar", Command.SCREEN, 1);
Command deleteCmd = new Command("Remover", Command.SCREEN, 1);
Command cancelCmd = new Command("Cancelar", Command.SCREEN, 1);

Command searchCmd = new Command("Buscar", Command.SCREEN, 1);

List list = new List("Contatos", List.IMPLICIT);
EditForm form = new EditForm();
SearchForm searchForm = new SearchForm();

NameComparator orderby = new NameComparator();
NameFilter nameFilter = new NameFilter(orderby);

private Contact[] currentContactList;

public RmsAgenda()
{
form.addCommand(saveCmd);
form.addCommand(cancelCmd);
form.addCommand(deleteCmd);
form.setCommandListener(this);

searchForm.addCommand(searchCmd);
searchForm.setCommandListener(this);

list.addCommand(searchCmd);
list.addCommand(addCmd);
list.addCommand(exitCmd);
list.setSelectCommand(selectCmd);
list.setCommandListener(this);

}

public void startApp()
{
refreshList();
}

public void pauseApp()
{
}

public void destroyApp(boolean unc)
{
}

private void refreshList()
{
list.deleteAll();
currentContactList = Contact.list(orderby, nameFilter);
for(int ccnt=0; ccnt < currentContactList.length; ccnt++)
{
String name = currentContactList[ccnt].firstName;
list.append(name + " "+currentContactList[ccnt].phoneNumber, null);
}
Display.getDisplay(this).setCurrent(list);
}

private void showForm(Contact c)
{
form.setContact(c);
Display.getDisplay(this).setCurrent(form);
}

public void commandAction(Command cmd, Displayable d)
{
if (cmd == exitCmd)
{
destroyApp(true);
notifyDestroyed();
}
else if ((d == list) && (cmd == addCmd))
{
form.setContact(new Contact());
Display.getDisplay(this).setCurrent(form);
}
else if ((d == form) && (cmd == saveCmd))
{
Contact c = form.getContact();
c.store();
refreshList();
}
else if ((d == list) && (cmd == selectCmd))
{
showForm(currentContactList[list.getSelectedIndex()]);
}
else if ((d == form) && (cmd == deleteCmd))
{
form.getContact().delete();
refreshList();
}
else if ((d == form) && (cmd == deleteCmd))
{
refreshList();
}
else if ((d == list) && (cmd == searchCmd))
{
Display.getDisplay(this).setCurrent(searchForm);
}
else if ((d == searchForm) && (cmd == searchCmd))
{
nameFilter.criteria = searchForm.getCriteria();
refreshList();
} else if ((d == form) && (cmd == cancelCmd))
{
refreshList();
}
}
}

class NameFilter implements RecordFilter
{
String criteria;
NameComparator orderby;

NameFilter(NameComparator orderby)
{
this.orderby = orderby;
}

public boolean matches(byte[] candidate)
{
if ((criteria == null) || (criteria.length() == 0))
{
return true;
}
else
return new Contact(candidate).firstName.startsWith(criteria);
}
}

class NameComparator implements RecordComparator
{

public int compare(byte[] rec1, byte[] rec2)
{
Contact c1 = new Contact(rec1);
Contact c2 = new Contact(rec2);

String s1 = c1.firstName;
String s2 = c2.firstName;

if (s1.compareTo(s2) == 0)
{
return RecordComparator.EQUIVALENT;
}
else if (s1.compareTo(s2) > 0)
{
System.out.println(c1+ " then " + c2);
return RecordComparator.FOLLOWS;
}
else
{
System.out.println(c2+ " then " + c1);
return RecordComparator.PRECEDES;
}
}
}

class ChangeNotifier implements RecordListener
{
public void recordAdded(RecordStore recordStore, int recordId){
try {
System.out.println("Added a record to "+recordStore.getName() + " id="+recordId);
} catch (RecordStoreNotOpenException x) {
x.printStackTrace();
}
}

public void recordChanged(RecordStore recordStore, int recordId){
try {
System.out.println("Changed a record in "+recordStore.getName() + " id="+recordId);
} catch (RecordStoreNotOpenException x) {
x.printStackTrace();
}
}

public void recordDeleted(RecordStore recordStore, int recordId){
try {
System.out.println("Deleted record from "+recordStore.getName() + " id="+recordId);
} catch (RecordStoreNotOpenException x) {
x.printStackTrace();
}
}
}

class SearchForm extends Form
{
private TextField searchField = new TextField("Buscar: ", "", 15, TextField.ANY);

public SearchForm()
{
super("Criterio de Busca");
append(searchField);
}

public String getCriteria()
{
return searchField.getString();
}
}

class EditForm extends Form
{
private Contact contact;
private TextField firstNameFld = new TextField("Nome: ", "", 15, TextField.ANY);
private TextField lastNameFld = new TextField("Sobrenome: ", "", 15, TextField.ANY);
private TextField phoneFld = new TextField("Telefone: ", "", 10, TextField.PHONENUMBER);

public EditForm()
{
super("Editar Contato");
append(firstNameFld);
append(lastNameFld);
append(phoneFld);
}

public void setContact(Contact c)//envia para a classe conta
{
contact = c;
firstNameFld.setString(contact.firstName);
lastNameFld.setString(contact.lastName);
phoneFld.setString(contact.phoneNumber);
}

public Contact getContact()//atribui para a classe conta
{
contact.firstName = firstNameFld.getString();
contact.lastName = lastNameFld.getString();
contact.phoneNumber = phoneFld.getString();
return contact;
}
}

class Contact//cria o arquivo,le,
{
private static final String storeName = "AgendaDB";

String firstName;
String lastName;
String phoneNumber;
private int id = -1;//uma variavel para armazenar a
//posição,ou seja, na hora de ler o registro

public Contact()
{
id = -1;
}

public Contact(int id)
{
this.id = id;
}

public Contact(byte[] data)//cria um registro por dados em bytes
{
populate(data);
}

public static Contact[] list(RecordComparator orderby, RecordFilter nameFilter)
{
Vector v = new Vector();
try
{
RecordStore rs = RecordStore.openRecordStore(storeName, true);
RecordEnumeration e = rs.enumerateRecords(nameFilter, orderby, false);
while (e.hasNextElement())
{
int id = e.nextRecordId();
Contact c = new Contact(id);
c.populate(rs.getRecord(id));
v.addElement(c);
}
rs.closeRecordStore();
} catch (RecordStoreException x)
{
x.printStackTrace();
return null;
}
Contact[] rtn = new Contact[v.size()];
v.copyInto(rtn);
return rtn;
}

public static Contact[] listByLastName()
{
return null;
}

public static Contact[] list()
{
return null;
}

public void store()
{
try
{
byte[] data = toBytes();
RecordStore rs = RecordStore.openRecordStore(storeName, true);
rs.addRecordListener(new ChangeNotifier());
if (id < 0)
{
rs.addRecord(data, 0, data.length);
}
else
{
rs.setRecord(id, data, 0, data.length);
}
rs.closeRecordStore();
} catch (RecordStoreException x)
{
x.printStackTrace();
}
}

public void delete()
{
if (id >= 0)
{
try
{
RecordStore rs = RecordStore.openRecordStore(storeName, false);
rs.deleteRecord(id);
rs.closeRecordStore();
} catch (RecordStoreException x)
{
x.printStackTrace();
}
}
else
{
throw new RuntimeException("Invalid record id "+id);
}
}

private byte[] toBytes()
{
return toString().getBytes();
}

private void populate(byte[] data)
{

String s = new String(data);

int idx = s.indexOf("|");
firstName = s.substring(0, idx);

int idx2 = s.indexOf("|", idx+1);
lastName = s.substring(idx+1, idx2);

phoneNumber = s.substring(idx2+1);
}

public String toString()
{
return (firstName + "|" + lastName +"|"+ phoneNumber);
}
} 

so pra ficar melhor de LER

bom meu caro…pra começar…eu nao usaria o RecordStore assim no seco…usaria o floggy…bem mais simples de buscar…salvar…etc…segundo:
vc pode declarar mo seu projeto qauntas midlets quiser…vc so tem que apontar la na sua propriedades do projeto quem é midlet e quem nao…que ai o emulador faz isso pra ti…vc ta usando o netbeans?