Java ME ile mobil yazılım programlamak (Basit Örnek)

Java destekli tüm cep telefonlarına, pdalara uygulama yazılabiliyor. Başlangıç olsun diye ders programını cep telefonunda kaydedip görebilmemi sağlayacak minik bir uygulama yazdım. Böylece Java ME’ye de bir merhaba demiş oldum.

Yukarıda ekran görüntüsü bulunan uygulamanın kodu:
package DP;

import java.util.Calendar;
import java.util.Date;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

/**
* Hüseyin Atasoy
* 02/04/2010
*/

// Canvas sınıfını miras al
class Tuvalim extends Canvas {
private String baslik, icerik;
private Font baslikf = Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_BOLD, Font.SIZE_MEDIUM);
private Font yazif = Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_PLAIN, Font.SIZE_SMALL);
private Midletim isteyen;

Tuvalim(Midletim _isteyen) {
isteyen = _isteyen;
}

public void paint(Graphics g) {
g.setColor(255, 255, 255);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(0, 0, 0);
g.setFont(baslikf);
g.setColor(0, 0, 255);
g.drawString(baslik, 10, 2, Graphics.TOP | Graphics.LEFT);
g.setColor(200, 0, 0);
g.drawLine(5, 18, getWidth() – 8, 18);
g.setFont(yazif);
g.setColor(0, 0, 0);

//Canvasta alt satıra geçişi olmadığı için alt satır geçişlerini bizim düzenlememiz lazım
icerik = ” ” + icerik;
String satir = “”;
int yukaridan = 23;
//int i = 1;
int konum = 0, oncekiKonum;
while (true) {
oncekiKonum = konum + 1;
konum = icerik.indexOf(‘n’, konum + 1);
try {
satir = icerik.substring(oncekiKonum, konum);
} catch (Exception ex) {
satir = icerik.substring(oncekiKonum, icerik.length());
break;
} finally {
satir = satir.trim();
if (satir.length() > 0) {
g.drawString(satir, 10, yukaridan, Graphics.TOP | Graphics.LEFT);
//Yanlarda 1), 2)… görünmesini istiyorsan alttakini aktifleştir.
//g.drawString((i++) + “) ” + satir, 10, yukaridan, Graphics.TOP | Graphics.LEFT);
}
yukaridan = yukaridan + 15;
}
}
}

void yaz(String _baslik, String _icerik) {
baslik = _baslik;
icerik = _icerik;
}

protected void keyPressed(int keycode) {

switch (keycode) {
case Canvas.KEY_NUM0:
isteyen.goster(isteyen.gunIsmi);
break;
case Canvas.KEY_NUM1:
isteyen.goster(“Pazartesi”);
break;
case Canvas.KEY_NUM2:
isteyen.goster(“Salı”);
break;
case Canvas.KEY_NUM3:
isteyen.goster(“Çarşamba”);
break;
case Canvas.KEY_NUM4:
isteyen.goster(“Perşembe”);
break;
case Canvas.KEY_NUM5:
isteyen.goster(“Cuma”);
break;
case Canvas.KEY_NUM6:
isteyen.goster(“Cumartesi”);
break;
case Canvas.KEY_STAR:
isteyen.duzenle();
break;
case Canvas.KEY_POUND:
isteyen.hakkinda();
break;
}
}
}

//MIDlet sınıfını miras al ve CommandListener interface’ini tamamla…
public class Midletim extends MIDlet implements CommandListener {
private int gun = 0;
public String gunIsmi = “”;
private String simdiki = “”;
kayitci kayitlar;
private Tuvalim T1;
private Command bugun = new Command(“Bugün”, Command.ITEM, 0);
private Command pazartesi = new Command(“Pazartesi”, Command.ITEM, 0);
private Command sali = new Command(“Salı”, Command.ITEM, 0);
private Command carsamba = new Command(“Çarşamba”, Command.ITEM, 0);
private Command persembe = new Command(“Perşembe”, Command.ITEM, 0);
private Command cuma = new Command(“Cuma”, Command.ITEM, 0);
private Command cumartesi = new Command(“Cumartesi”, Command.ITEM, 0);
private Command duzenle = new Command(“Düzenle”, Command.ITEM, 0);
private Command hakkinda = new Command(“Hakkında”, Command.ITEM, 0);
private Command cikis = new Command(“Çıkış”, Command.EXIT, 0);
private Command iptal = new Command(“İptal”, “İptal”, Command.EXIT, 0);
private Command kaydet = new Command(“Kaydet”, “Kaydet”, Command.ITEM, 0);
private TextBox textBox = new TextBox(” “, null, 400, TextField.ANY);

//MIDlet sınıfına ait startApp() fonksiyonunun implementasyonu
public void startApp() {
gunNum();
hangiGun();
try {
kayitlar = new kayitci(“DersProgrami”);
} catch (Exception ex) {
}
goster(gunIsmi);
textBox.addCommand(kaydet);
textBox.addCommand(iptal);
textBox.setCommandListener(this);
}

//MIDlet sınıfına ait destroyApp() fonksiyonunun implementasyonu
protected void destroyApp(boolean unconditional) {
Display.getDisplay(this).setCurrent(null);
notifyDestroyed();
}

//MIDlet sınıfına ait pauseApp() fonksiyonunun implementasyonu
protected void pauseApp() {
}

//CommandListener interface’ine ait commandAction() fonksiyonunun implementasyonu
public void commandAction(Command command, Displayable displayable) {

if (displayable == textBox) {
if (command == iptal) {
Display.getDisplay(this).setCurrent(Tuval());
} else if (command == kaydet) {
kaydet(simdiki, textBox.getString());

goster(simdiki);
}
} else {
if (command == bugun) {
goster(gunIsmi);
} else if (command == pazartesi) {
goster(pazartesi.getLabel());
} else if (command == sali) {
goster(sali.getLabel());
} else if (command == carsamba) {
goster(carsamba.getLabel());
} else if (command == persembe) {
goster(persembe.getLabel());
} else if (command == cuma) {
goster(cuma.getLabel());
} else if (command == cumartesi) {
goster(cumartesi.getLabel());
} else if (command == duzenle) {
duzenle();
} else if (command == hakkinda) {
hakkinda();
} else if (command == cikis) {
destroyApp(true);
}
}
}

public void gunNum() {
Calendar a = Calendar.getInstance();
a.setTime(new Date());
gun = a.get(a.DAY_OF_WEEK);
Display.getDisplay(this).setCurrent(Tuval());
}

public void hakkinda() {
Alert alert = new Alert(“Hakkında”);
alert.setString(“Hüseyin Atasoy, 02/04/2010”);
alert.setType(AlertType.INFO);
alert.setTimeout(Alert.FOREVER);
Display.getDisplay(this).setCurrent(alert, Tuval());
}

public void duzenle() {
textBox.setTitle(simdiki);
textBox.setString(kayitlar.kayitOku(simdiki));
Display.getDisplay(this).setCurrent(textBox);
}

public void hangiGun() {
switch (gun) {
case 1: //Pazar günü tatil o gün ders mi olur, Pazartesi gününü göster…
gunIsmi = “Pazartesi”; break;
case 2:
gunIsmi = “Pazartesi”; break;
case 3:
gunIsmi = “Salı”; break;
case 4:
gunIsmi = “Çarşamba”; break;
case 5:
gunIsmi = “Perşembe”; break;
case 6:
gunIsmi = “Cuma”; break;
case 7:
gunIsmi = “Cumartesi”; break;
}
}

public Tuvalim Tuval() {
if (T1 == null) {
T1 = new Tuvalim(this);
T1.addCommand(bugun);
T1.addCommand(pazartesi);
T1.addCommand(sali);
T1.addCommand(carsamba);
T1.addCommand(persembe);
T1.addCommand(cuma);
T1.addCommand(cumartesi);
T1.addCommand(duzenle);
T1.addCommand(hakkinda);
T1.addCommand(cikis);
T1.setCommandListener(this);

}
return T1;
}

public void goster(String hangiGunu) {
simdiki = hangiGunu;
String kayit = “”;

kayit = kayitlar.kayitOku(simdiki);
if (kayit == null) {
kayit = ”  — Ayarlanmamış –“;
}

try {
Tuval().yaz(hangiGunu, kayit);
Tuval().repaint();
} catch (Exception ex) {
Alert alert = new Alert(“Kayıt Yok”);
alert.setString(“Bu güne ait bir kayıt bulunmuyor!”);
alert.setType(AlertType.WARNING);
alert.setTimeout(Alert.FOREVER);
Display.getDisplay(this).setCurrent(alert, textBox);
}
Display.getDisplay(this).setCurrent(Tuval());
}

public void kaydet(String hangiGun, String dProg) {
try {
kayitlar.ekle(hangiGun, dProg);
kayitlar.kaydet();
} catch (Exception ex) {
}
}
}

RMS veritabanı okumak/yazma sınıfı:
package DP;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.*;
import javax.microedition.rms.*;

/**
* RecordStore Okuma Yazma Sınıfı
* Hüseyin Atasoy
* 02/04/2010
*/

public class kayitci {

private String vtIsmi;
private Hashtable hashTablom;

public kayitci(String _vtIsmi) throws RecordStoreException, IOException {
vtIsmi = _vtIsmi;
hashTablom = new Hashtable();
yukle();
}

public String kayitOku(String anahtar) {
return (String) hashTablom.get(anahtar);
}

public void ekle(String anahtar, String deger) {
if (deger == null) {
deger = “”;
}
hashTablom.put(anahtar, deger);
}

private void yukle() throws RecordStoreException, IOException {
RecordStore rs = null;
RecordEnumeration re = null;

try {
rs = RecordStore.openRecordStore(vtIsmi, true);
re = rs.enumerateRecords(null, null, false);
while (re.hasNextElement()) {
byte[] baytDizi = re.nextRecord();

ByteArrayInputStream bin = new ByteArrayInputStream(baytDizi);
DataInputStream din = new DataInputStream(bin);
String kayit = new String(din.readUTF());

//ismi ayıkla
int index = kayit.indexOf(‘|’);
String isim = kayit.substring(0, index);
String deger = kayit.substring(index + 1);
ekle(isim, deger);
}
} finally {
if (re != null) {
re.destroy();
}
if (rs != null) {
rs.closeRecordStore();
}
}
}

public void kaydet() throws RecordStoreException, IOException {
RecordStore rs = null;
RecordEnumeration re = null;
try {
rs = RecordStore.openRecordStore(vtIsmi, true);
re = rs.enumerateRecords(null, null, false);

// Tüm kayıtları sil
while (re.hasNextElement()) {
int id = re.nextRecordId();
rs.deleteRecord(id);
}

// Sonra da kayıtları yerleştir
Enumeration anahtarlar = hashTablom.keys();
while (anahtarlar.hasMoreElements()) {
String anahtar = (String) anahtarlar.nextElement();
String deger = kayitOku(anahtar);
String kayit = anahtar + “|” + deger;

//maksat utf kodlamasıyla yazılsın, yoksa Türkçe karakterler görünmüyor
ByteArrayOutputStream bout = new ByteArrayOutputStream();
DataOutputStream dout = new DataOutputStream(bout);
dout.writeUTF(kayit);

byte[] baytDizi = bout.toByteArray();
rs.addRecord(baytDizi, 0, baytDizi.length);
}
} finally {
if (re != null) {
re.destroy();
}
if (rs != null) {
rs.closeRecordStore();
}
}
}
}