Mobile Programming dengan Java J2ME

70
Mobile Programming dengan Java J2ME Modul Praktikum [Agustus 2010] [D3 Teknik Informatika FMIPA UNS] Created by : Sarngadi Palgunadi Y Fora Falentina

description

Mobile Programming dengan Java J2ME

Transcript of Mobile Programming dengan Java J2ME

Mobile Programming dengan Java J2ME

Modul Praktikum

[Agustus 2010][D3 Teknik Informatika FMIPA UNS]

Created by :

Sarngadi Palgunadi Y

Fora Falentina

Pertemuan 1Kompetensi Dasar : Memahami konsep aplikasi J2ME

Sub standar Kompetensi : Mahasiswa mampu membuat aplikasi pemrograman bergerak dengan J2ME

Materi pokok : Slide KD 1

1.1 Menjelaskan kegunaan, keuntungan dan ke Mengidentifikasi Perangkat mobile

1.2 Menjelaskan Java Platform 1.3 Menjelaskan arsitektur J2ME 1.4 Menjelaskan kegunaan CLDC dan CDC 1.5 Mendeskripsikan beberapa kelas dlm CLDC

Latihan di Lab :

a. Latihan pokok 1) Percobaan pertama

Build and Run program ini di Netbeans Berikan komentar programCatat hasil outputBuat laporan

/* Percobaan Pertama: Penulisan Hello Word*/

import javax.microedition.midlet.*;import javax.microedition.lcdui.*;

public class Midlet1 extends MIDlet {private Display display;TextBox tampil = null;

public void startApp() {display = Display.getDisplay(this);tampil = new TextBox("MIDlet Pertamaku", "Hello World !!!", 20, 0);display.setCurrent(tampil );}

public void pauseApp() {}

public void destroyApp(boolean unconditional) {

}}

b. Latihan pengembangan : coba sekarang Anda lakukan membuat program sederhana seperti pada latihan sebelumnya dengan hasil program yang menampilkan tulisan berisi “Saya Dengan Nim(di isi nim masing – masing ) Bangga Belajar OOP Lanjut” .

Ringkasan

Dengan latihan ini Anda diharapkan menguasai kompetensi pengenalan J2ME khususnya mampu mengenal awal J2ME dan mampu membuat program sederhana di netbeans. Perhatikan dalam setiap program terdapat 5 method yaitu :

1. Method main()

2. Method startApp()

3. Method pauseApp()

4. Method destroyApp()

5. Method exitCommand()

Pertemuan 2Kompetensi Dasar : Memahami konsep aplikasi J2ME

Sub kompetensi : Mahasiswa mampu membuat aplikasi pemrograman bergerak dengan J2ME

Materi pokok :

1.5 Menjelaskan Generic Connection Network1.6 Menjelaskan MID Device, MIDP dan MIDLet1.7 Menjelaskan komponen-komponen dlm file manifest1.8 Dapat membuat program dgn menggunakan Netbeans 6.0

Latihan di Lab :

a. Latihan pokok (lihat modul latihan yang ada)

1) Percobaan pertama

Build and Run program ini di Netbeans 6.0Berikan komentar programCatat hasil outputBuat laporan

/* Percobaan pertama : Pemakaian MIDlet Secara sederhana*/

import javax.microedition.midlet.*;import javax.microedition.lcdui.*;

/* pembuatan subclass dari MIDlet pada MIDP dgn nama HelloMidLetnama ini harus sama dgn nama proyek saat dibuat*/

public class HelloMidlet extends MIDlet implements CommandListener {

/* properties dari MIDlethanya ada satu object display per MIDlet unt menggambar pada layarexitCommand merupakan perintah untuk keluarconstructor untuk objek Alert (lihat bab selanjutnya)*/

Display display ;Command exitCommand = new Command("Exit",Command.EXIT,1);Alert helloAlert;

/* constructor dan method utamaaddCommand menambahkan perintah pada layar

setTimeout dibuat untuk selamanya (FOREVER)setCommandListener untuk memberikan informasi pada semua command event ke MIDPuntuk itu harus dibuat commandAction yang menggunakan parameter Command danDisplayable*/

public HelloMidlet() {helloAlert = new Alert("Hello MIDlet", "Hello, WORLD !!",null,AlertType.INFO);helloAlert.setTimeout(Alert.FOREVER);helloAlert.addCommand(exitCommand);helloAlert.setCommandListener(this);

}

/* peritah ini dapat dimasukkan beberapa kali dalam satu aplikasibila program dihentikan, misalnya ada telp masuk, maka pauseApp dikerjakanjika panggian selesai, maka masuk ke startApp lagidisplay.setCurrent : untuk menampilkan pada layaryang dipaggil lewat method static Display.getDisplay

*/

public void startApp() {if (display == null) {

display = Display.getDisplay(this); }display.setCurrent(helloAlert);}

public void pauseApp() { }

public void destroyApp (boolean unconditional) { }

/* hentikan program kalau peritnah exit dikerjakan, yaitu lewat notifyDestroyed*/

public void commandAction(Command c, Displayable d) {if (c == exitCommand) {

destroyApp(true);notifyDestroyed(); // keluar

}}

}

Ringkasan

Dengan latihan ini Anda diharapkan menguasai kompetensi pengenalan J2ME khususnya untuk memahami pengaplikasian Midlet yang diterapkan melalui netbeans.

Pertemuan 3Kompetensi Dasar : Memahami pengembangan aplikasi high level user

interface

Sub kompetensi : Mahasiswa mampu mengembangkan aplikasi khususnya high level UI.

Materi pokok :

2.1 MIDP UI2.2 High level vs Low Level

Latihan di Lab :

a. Latihan pokok (lihat modul latihan yang ada)1) Percobaan pertama

Build and Run program ini di WTK2.5Berikan komentar programCatat hasil outputBuat laporan

/* Percobaan pertama: DateFieldCoba Anda ganti beberapa tanggal dan jam yang muncul di layarKemudian simpanlah*/import javax.microedition.midlet.*;import javax.microedition.lcdui.*;

public class DateFieldExample extends MIDlet implements CommandListener {Display display;Form dateForm;Command exitCommand = new Command("Exit", Command.EXIT,1);DateField dateonly, timeonly, datetime;

public DateFieldExample () {dateForm = new Form("CONTOH Dates Field Modes");dateForm.addCommand(exitCommand);dateForm.setCommandListener(this);

dateonly= new DateField("Ulang Tahun (DATE)",DateField.DATE);timeonly= new DateField("Set Alarm(TIME)",DateField.TIME);datetime= new DateField("Keberangkatan (DATE_TIME)",

DateField.DATE_TIME);dateForm.append(dateonly);dateForm.append(timeonly);dateForm.append(datetime);

}

public void startApp() {if (display == null) {

display = Display.getDisplay(this);display.setCurrent(dateForm);

}}

public void pauseApp() { }public void destroyApp(boolean unconditional) { }

public void commandAction(Command c, Displayable d) {if (c == exitCommand) {

destroyApp(true);notifyDestroyed();}

}}

Hasil Program

\

2) Percobaan kedua

Build and Run program ini di WTK2.5Berikan komentar programCatat hasil outputBuat laporan

/* Percobaan Ketujuh: Pemakaian Canvas High LevelCoba gantikan tampilan, warna dan posisinya*/

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

public class HelloD3 extends MIDlet {private Display display;HelloCanvas1 canvas;

public void startApp() {if(display == null){

canvas = new HelloCanvas1(this);display = Display.getDisplay(this);

}display.setCurrent(canvas);

}

public void pauseApp() {}public void destroyApp(boolean unconditional) {}protected void Quit(){

destroyApp(true);notifyDestroyed();}

}

class HelloCanvas1 extends Canvas implements CommandListener {private Command exitCommand = new Command("Exit",Command.EXIT,0);private HelloD3 ilkom;

public HelloCanvas1(HelloD3 ilkom){this.ilkom = ilkom;addCommand(exitCommand);setCommandListener(this);

}

protected void paint (Graphics g){g.setColor(255,255,255);g.fillRect(0,0,getWidth(),getHeight());g.setColor(255,0,0);g.drawString("D3 ILKOM",getWidth()/2,getHeight()/2,Graphics.TOP | Graphics.HCENTER );g.setColor(0,0,255);Font font = g.getFont();g.drawString("TEHNISI JARDIKNAS FMIPA",

getWidth()/2,getHeight()/2+font.getHeight() ,Graphics.TOP | Graphics.HCENTER);}

public void commandAction(Command c, Displayable d){if(c == exitCommand){

ilkom.Quit();}

}}

Hasil Program :

Ringkasan

Dengan latihan ini Anda diharapkan menguasai kompetensi memahami tentang high level user interface khususnya dapat membedakan antara high level dan low level

Pertemuan 4Kompetensi Dasar : Memahami pengembangan aplikasi high level user

interface

Sub kompetensi : Mahasiswa mampu mengembangkan aplikasi khususnya high level UI.

Materi pokok :

2.3 Class Display2.4 Class Displayable2.5 Form2.6 Alert

Latihan di Lab :

b. Latihan pokok (lihat modul latihan yang ada)1) Percobaan pertama

Build and Run program ini di WTK2.5Berikan komentar programCatat hasil outputBuat laporan

/* Percobaan Kedua: membuat Alert*/import javax.microedition.midlet.*;import javax.microedition.lcdui.*;public class AlertExample extends MIDlet implements CommandListener{

Display display;

Form mainForm; Command exitCommand = new Command("Exit",Command.EXIT,0);

Command okCommand = new Command("Ok",Command.OK,1);Gauge gauge = new Gauge(null,false,5,0);

Command[] commands= { new Command("Alarm",Command.OK,0),

new Command("Confirmasi",Command.OK,0),new Command("Info",Command.OK,0),

new Command("Warning",Command.OK,0),new Command("Error",Command.OK,0),new Command("Modal",Command.OK,0),};

Alert[] alerts = {

new Alert("Alarm", "Sebuah contoh tipe Alarm Alert", null, AlertType.ALARM),new Alert("Confirmation"," Sebuah contoh tipe Confirmation

Alert",null,AlertType.CONFIRMATION),new Alert("Info"," Sebuah contoh tipe Info Alert",null,

AlertType.INFO),new Alert("Warning"," Sebuah contoh tipe Warning Alert",null, AlertType.WARNING),new Alert("Error"," Sebuah contoh tipe Error Alert",null, AlertType.ERROR),new Alert("Modal"," Sebuah contoh tipe Modal Alert:timeout =

FOREVER",null,AlertType.ERROR),};

public AlertExample(){mainForm = new Form("CONTOH: ALERT EXAMPLE");mainForm.addCommand(exitCommand);for (int i=0;i<commands.length; i++) {

mainForm.addCommand(commands[i]);}mainForm.setCommandListener(this);

alerts[3].setIndicator(gauge);alerts[3].setTimeout(5000); // dalam mili detikalerts[4].addCommand(okCommand);alerts[5].setTimeout(Alert.FOREVER);}

public void startApp() {if (display == null) {

display = Display.getDisplay(this);display.setCurrent(mainForm);

}}

public void pauseApp() {}public void destroyApp(boolean unconditional) {}public void commandAction(Command c, Displayable d) {

if (c== exitCommand) {destroyApp(true);notifyDestroyed(); }

for (int i=0; i < commands.length; i++) {if ( c == commands[i]) {

display.setCurrent(alerts[i]); }}

}

Hasil Program :

Ringkasan

Dengan latihan ini Anda diharapkan menguasai kompetensi memahami tentang high level user interface khususnya dapat mengaplikasikan program mengenai alert.

Pertemuan 5Kompetensi Dasar : Memahami pengembangan aplikasi high level user

interface

Sub kompetensi : Mahasiswa mampu mengembangkan aplikasi khususnya high level UI.

Materi pokok :

2.7 List2.8 Multiple Choice

Latihan di Lab :

a. Latihan pokok (lihat modul latihan yang ada)1) Percobaan pertama

Build and Run program ini di WTK2.5Berikan komentar programCatat hasil outputBuat laporan

/* Percobaan Ketiga : Contoh membuat List */

import javax.microedition.midlet.*;import javax.microedition.lcdui.*;

public class ListExample extends MIDlet implements CommandListener {Display display;List list;

Command exitCommand = new Command("Exit",Command.EXIT,1);Command newCommand = new Command("New Item",Command.OK,1);Command renameCommand= new Command("Rename Item",Command.OK,1);Command deleteCommand= new Command("Delete Item",Command.EXIT,1);

Ticker ticker = new Ticker ("D3 Ilmu Komputer-TKJ: Tehnisi Jardiknas");

public ListExample() {list = new List("CONTOH LIST",List.IMPLICIT);list.append("List Pertama",null);list.append("List Kedua ",null);list.append("List Ketiga ",null);list.setTicker(ticker);list.addCommand(exitCommand);list.addCommand(newCommand);list.addCommand(renameCommand);list.addCommand(deleteCommand);

list.setCommandListener(this);}

public void startApp() {if (display == null) {

display = Display.getDisplay(this);display.setCurrent(list);

}}

public void pauseApp() { }

public void destroyApp(boolean unconditional) { }

public void commandAction(Command c, Displayable d) {if (c == exitCommand) {

destroyApp(true);notifyDestroyed();

}if (c== list.SELECT_COMMAND) {

int index = list.getSelectedIndex();String currentitem = list.getString(index);// harap menjalankan sesuatu di sini}

}}

Hasil Program :

2) Percobaan kedua

Build and Run program ini di WTK2.5Berikan komentar programCatat hasil outputBuat laporan

/* Percobaan Keenam: DynamicList Lakukan beberapa masukan itemKemudian hapuslah*/import javax.microedition.midlet.*;import javax.microedition.lcdui.*;

public class DynamicList extends MIDlet implements CommandListener {Display display;List list;TextBox textbox;Command exitCommand = new Command("EXIT",Command.EXIT,1);Command addCommand = new Command("Tambah Item",Command.OK,1);Command removeCommand = new Command("Hapus Item",Command.OK,1);Command okCommand = new Command("OK",Command.OK,1);Command cancelCommand = new Command("Cancel",Command.EXIT,1);

public DynamicList() {list = new List("D3-ILKOM:Dynamic List",List.IMPLICIT);list.addCommand(exitCommand);list.addCommand(addCommand);list.addCommand(removeCommand);list.setCommandListener(this);

textbox = new TextBox("TAMBAHKAN List Item","",64, TextField.ANY);textbox.addCommand(okCommand);textbox.addCommand(cancelCommand);textbox.setCommandListener(this);

}

public void startApp() {if (display == null) {

display = Display.getDisplay(this);display.setCurrent(list);

}}public void pauseApp() { }public void destroyApp(boolean unconditional) { }public void commandAction(Command c, Displayable d) {

if ( c == exitCommand) {notifyDestroyed(); // keluar

}if (c == addCommand) {

textbox.setString("");display.setCurrent(textbox);

}if (c == removeCommand) {

int index = list.getSelectedIndex();if (index != -1) {

list.delete(index);}

else { // tdk ada item dipilih}

}if (c == okCommand) {

int index = list.getSelectedIndex();if (index != -1) {

list.insert(index,textbox.getString(),null);}else { //mungkin memang kosong

list.append(textbox.getString(),null); }display.setCurrent(list);}

if (c == cancelCommand) {display.setCurrent(list);

}}

}

Hasil Program :

3) Percobaan ketiga

Build and Run program ini di WTK2.5

Berikan komentar programCatat hasil outputBuat laporan

/***** Percobaan Keempat: Choice Example*/import javax.microedition.midlet.*;import javax.microedition.lcdui.*;

public class ChoiceExample extends MIDlet implements CommandListener { Display display; Form choiceForm; Command exitCommand = new Command("Exit",Command.EXIT,1); ChoiceGroup choiceMultiple,choiceExclusive,choicePopup;

public ChoiceExample() {choiceForm = new Form("Contoh: Choice Group Types");choiceForm.addCommand(exitCommand);

choiceForm.setCommandListener(this);

choiceExclusive=new ChoiceGroup("Exclusive",Choice.EXCLUSIVE);choiceExclusive.append("Pria",null);choiceExclusive.append("Wanita",null);choiceForm.append(choiceExclusive);

choiceMultiple = new ChoiceGroup("Multiple",Choice.MULTIPLE);choiceMultiple.append("Apple",null);choiceMultiple.append("Jeruk",null);choiceMultiple.append("Mangga",null);choiceForm.append(choiceMultiple);

choicePopup = new ChoiceGroup("Popup",Choice.POPUP);choicePopup.append("Tehn Info",null);choicePopup.append("Man Info",null);choicePopup.append("Tehn Komp",null);choicePopup.append("Tehn Jardiknas",null);choiceForm.append(choicePopup);}

public void startApp() { if (display == null) {

display =Display.getDisplay(this);display.setCurrent(choiceForm); }

}

public void pauseApp() { }

public void destroyApp(boolean unconditional) { }

public void commandAction(Command c, Displayable d) { if (c == exitCommand) {

destroyApp(true);notifyDestroyed(); }}

Hasil Program :

Ringkasan

Dengan latihan ini Anda diharapkan menguasai kompetensi memahami tentang high level user interface khususnya dapat mengmbangkan program mengenai list dan multiple choise.

Pertemuan 6Kompetensi Dasar : Memahami pengembangan aplikasi low level user

interface

Sub kompetensi : Mahasiswa mampu mengembangkan aplikasi khususnya low level UI.

Materi pokok :

3.1 Pengertian Low Level3.2 Class Canvas3.3 Menggambar text

Latihan di Lab :

b. Latihan pokok (lihat modul latihan yang ada)1) Percobaan pertama

/* * MidletBonus2.java * * Created on 10 Oktober 2007, 22:11

*/

import javax.microedition.lcdui.Canvas;import javax.microedition.lcdui.Display;import javax.microedition.lcdui.Displayable;import javax.microedition.lcdui.Graphics;import javax.microedition.midlet.MIDlet;

/** *

* @author Administrator * @version */public class MidletBonus2 extends MIDlet {

private Display layar; private Tampil grafis; public MidletBonus2() { layar = Display.getDisplay(this); grafis = new Tampil(this);

} public void startApp() { layar.setCurrent(grafis); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void exitMIDlet() {

destroyApp(true); notifyDestroyed(); }

}class Tampil extends Canvas {

private MidletBonus2 objek_grafis;

public Tampil(MidletBonus2 filledRectangleExample) { this.objek_grafis = objek_grafis; } public void paint(Graphics objek) { objek.setColor(255, 255, 255); objek.setColor(0, 255, 0); objek.fillRoundRect(100, 100, 50, 100, 200, 50); }

}

Hasil Program :

c. Latihan pengembangan : coba sekarang Anda lakukan membuat program sederhana seperti pada latihan sebelumnya dengan menggantikan warna tampilan yang berbeda dari hasil program sebelumnya dan Anda dapat mengetahui perintah syntak mana yang mempengaruhi pada perubahan warna tersebut .

Ringkasan

Dengan latihan ini Anda diharapkan menguasai kompetensi memahami pengembangan low level UI dan mampu mengembangkan program sederhana yang mengacu aplikasi low level UI ini

Pertemuan 7Kompetensi Dasar : Memahami pengembangan aplikasi low level user

interface

Sub kompetensi : Mahasiswa mampu mengembangkan aplikasi khususnya low level UI.

Materi pokok :

3.4 Menggambar garis, segiempat, round rectangle, lingkaran dan sudut

Latihan di Lab :

a. Latihan pokok (lihat modul latihan yang ada)

1) Percobaan pertama

Build and Run program ini di WTK2.5Berikan komentar programCatat hasil outputBuat laporan

/* Percobaan kedelapan: Menggambar garis lurus bewarna*/

import javax.microedition.midlet.*;import javax.microedition.lcdui.*;

public class GarisWarna extends MIDlet {private Display display;HelloCanvas2 canvas;

public void startApp() {if (display == null){canvas = new HelloCanvas2(this);display = Display.getDisplay(this);

}display.setCurrent(canvas);}

public void pauseApp() {}

public void destroyApp(boolean unconditional) {}

protected void Quit(){destroyApp(true);

notifyDestroyed();}

class HelloCanvas2 extends Canvas implements CommandListener {private Command exitCommand = new Command("Exit",Command.EXIT,0);private GarisWarna line;

public HelloCanvas2(GarisWarna line){this.line = line;addCommand(exitCommand);setCommandListener(this);

}

protected void paint(Graphics g){g.setColor(255,255,255);g.fillRect(0,0,getHeight(),getWidth());g.setColor(255,0,0);g.drawLine(0,0,getWidth()-1,getHeight()-1);g.setColor(0,255,0);g.drawLine(0,getHeight()/2,getWidth()-1,getHeight()/2);g.setColor(0,0,255);g.drawLine(0,getHeight()-1,getWidth()-1,getHeight()-1);g.setColor(0,0,0);g.drawLine(0,getHeight()-1,getWidth()-1,0);

}

public void commandAction(Command c, Displayable d){if(c == exitCommand)

{line.Quit();}

}}

}

Hasil Program :

2) Percobaan kedua

Build and Run program ini di WTK2.5Berikan komentar programCatat hasil outputBuat laporan

/* Percobaan kesembilan: Menggambar kotak*/

import javax.microedition.midlet.*;import javax.microedition.lcdui.*;

public class Kotak extends MIDlet {private Display display;HelloCanvas3 canvas;

public void startApp() {if (display == null){

canvas = new HelloCanvas3(this);display = Display.getDisplay(this);

}display.setCurrent(canvas);

}

public void pauseApp() { }

public void destroyApp(boolean unconditional) { }

protected void Quit(){destroyApp(true);notifyDestroyed();

}

class HelloCanvas3 extends Canvas implements CommandListener {private Command exitCommand = new Command("Exit",Command.EXIT,7);private Kotak segiempat;

public HelloCanvas3(Kotak segiempat){this.segiempat = segiempat;addCommand(exitCommand);setCommandListener(this);

}

protected void paint (Graphics g){g.setColor(255,255,255);g.fillRect(0,0,getWidth(),getHeight());//menggambar kotak bewarna kuningg.setColor(0,0,0);g.drawRect(8,8,64,32);g.setColor(255,255,0);g.fillRect(8,8,64,32);//menggambar berbagai macam jenis kotakg.setColor(0,0,0);g.drawRect(8,50,88,44);g.drawRoundRect(108,50,88,44,18,18);g.fillRect(8,120,88,44);g.fillRoundRect(108,120,88,44,18,18);

}

public void commandAction(Command c, Displayable d){if (c == exitCommand){

segiempat.Quit();}

}}

}

Hasil Program :

3) Percobaan ketiga

Build and Run program ini di WTK2.5Berikan komentar programCatat hasil outputBuat laporan

/* Percobaan kesepuluh: menggambar sudut*/

import javax.microedition.midlet.*;import javax.microedition.lcdui.*;

public class Sudut extends MIDlet {private Display display;HelloCanvas4 canvas;

public void startApp() {if (display == null){

canvas = new HelloCanvas4(this);display = Display.getDisplay(this);

}

display.setCurrent(canvas);}

public void pauseApp() { }public void destroyApp(boolean unconditional) { }

protected void Quit(){destroyApp(true);notifyDestroyed();

}

class HelloCanvas4 extends Canvas implements CommandListener {private Command exitCommand = new Command("Exit",Command.EXIT,1);private Sudut angle;public HelloCanvas4(Sudut angle){this.angle = angle;addCommand(exitCommand);setCommandListener(this);}

protected void paint (Graphics g){g.setColor(255,255,255);g.fillRect(0,0,getWidth(),getHeight());g.setColor(255,0,0);g.drawArc(18,18,50,50,0,360);g.setColor(0,255,0);g.drawArc(40,40,100,120,0,180);g.setColor(0,0,255);g.fillArc(100,200,80,100,0,90);

}

public void commandAction(Command c, Displayable d){if (c == exitCommand){

angle.Quit();}

}}

}Hasil Program :

Ringkasan

Dengan latihan ini Anda diharapkan menguasai kompetensi memahami pengembangan low level UI dan mampu mengembangkan program sederhana dimana mencakup dalam pembuatan garis, segi empat, dan sudut.

Pertemuan 8

Kompetensi Dasar : Memahami pengembangan aplikasi low level user interface

Sub kompetensi : Mahasiswa mampu mengembangkan aplikasi khususnya low level UI.

Materi pokok :

3.5 Anchor point dari text dan image

Latihan di Lab :

a. Latihan pokok (lihat modul latihan yang ada)1) Percobaan pertama

Build and Run program ini di WTK2.5Berikan komentar programCatat hasil outputBuat laporan

/* Percobaan kesepuluh: Membuat text*/

import javax.microedition.midlet.*;import javax.microedition.lcdui.*;

public class Text extends MIDlet{private Display display;private TextCanvas canvas;private AnchorPtList anchorPt;private int anchorPoint = Graphics.BASELINE | Graphics.HCENTER;public Text(){display = Display.getDisplay(this);canvas = new TextCanvas(this);anchorPt = new AnchorPtList("Anchor point", List.IMPLICIT, this);}

protected void startApp() {showCanvas();

}

protected void pauseApp() { }protected void destroyApp( boolean unconditional ) { }

public void showCanvas() {display.setCurrent(canvas);

}

public void showList(){display.setCurrent(anchorPt);

}

public int getAnchorPoint(){return anchorPoint;

}

public void setAnchorPoint(int anchorPoint){this.anchorPoint = anchorPoint;

}

public void exitMIDlet() {destroyApp(true);notifyDestroyed();

}}

class TextCanvas extends Canvas implements CommandListener{private Command cmExit;private Command cmGetAnchorPt;private Text midlet;

public TextCanvas(Text midlet) {this.midlet = midlet;cmExit = new Command("Exit", Command.EXIT, 1);cmGetAnchorPt = new Command("Anchor", Command.SCREEN, 2);addCommand(cmExit);addCommand(cmGetAnchorPt);setCommandListener(this);

}

protected void paint(Graphics g){int xcenter = getWidth() / 2,

ycenter = getHeight() / 2;g.setColor(255, 255, 255);g.fillRect(0, 0, getWidth(), getHeight());g.setColor(0, 0, 0);g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_MEDIUM));g.drawLine(xcenter, ycenter, xcenter, ycenter);g.drawString("TEST LETAK ANCHOR POINT", xcenter, ycenter, midlet.getAnchorPoint());}

public void commandAction(Command c, Displayable d) {if (c == cmExit)

midlet.exitMIDlet();else if (c == cmGetAnchorPt){

// panggil method untuk menampilkan listmidlet.showList();}

}}

class AnchorPtList extends List implements CommandListener{private Text midlet;

public AnchorPtList(String title, int listType, Text midlet) {

super(title, listType);this.midlet = midlet;append("Top/Left", null);append("Top/HCenter", null);append("Top/Right", null);append("Baseline/Left", null);append("Baseline/HCenter", null);append("Baseline/Right", null);append("Bottom/Left", null);append("Bottom/HCenter", null);append("Bottom/Right", null);setCommandListener(this);}

public void commandAction(Command c, Displayable s) {switch (getSelectedIndex()) {

case 0:midlet.setAnchorPoint(Graphics.TOP | Graphics.LEFT);break;

case 1:midlet.setAnchorPoint(Graphics.TOP | Graphics.HCENTER);break;

case 2:midlet.setAnchorPoint(Graphics.TOP | Graphics.RIGHT);break;

case 3:midlet.setAnchorPoint(Graphics.BASELINE | Graphics.LEFT);break;

case 4:midlet.setAnchorPoint(Graphics.BASELINE | Graphics.HCENTER);

break;case 5:

midlet.setAnchorPoint(Graphics.BASELINE | Graphics.RIGHT);break;

case 6:midlet.setAnchorPoint(Graphics.BOTTOM | Graphics.LEFT);break;

case 7:midlet.setAnchorPoint(Graphics.BOTTOM | Graphics.HCENTER);

break;case 8:

midlet.setAnchorPoint(Graphics.BOTTOM | Graphics.RIGHT);break;

default:midlet.setAnchorPoint(Graphics.BASELINE | Graphics.HCENTER);}

midlet.showCanvas();

}}Hasil Program :

2) Percobaan kedua

/* * MidletBonus3.java * * Created on 10 Oktober 2007, 23:29 */

import javax.microedition.midlet.*;import javax.microedition.lcdui.*;

/** * * @author Administrator * @version

*/public class MidletBonus3 extends MIDlet {

public void startApp() { Animasi animasi = new Animasi(); animasi.start(); Display.getDisplay(this).setCurrent(animasi); }

public void pauseApp() { }

public void destroyApp(boolean unconditional) {}}class Animasi extends Canvas implements Runnable { private boolean mulai; private int posisi; private int border;

private int jalan;

public Animasi() { posisi = 0; border = 20;

jalan = 75; }

public void start() { mulai = true;

Thread t = new Thread(this); t.start(); } public void stop() { mulai = false; } public void paint(Graphics gambar) { int width = getWidth(); int height = getHeight(); gambar.setColor(100,100,50); gambar.fillRect(0, 0, width - 1, height - 1); int x = border; int y = border; int w = width - border * 2; int h = height - border * 2; for (int i = 0; i < 8; i++) { gambar.setColor(115,68,(8 - i) * 32 - 16); gambar.fillArc(x, y, w, h, (posisi + i) * (10*10), 10); }

} public void run() { while (mulai) { posisi = (posisi + 1) % 360; repaint(); try { Thread.sleep(jalan); } catch (InterruptedException ie) {} } }

}

Ringkasan

Dengan latihan ini Anda diharapkan menguasai kompetensi memahami pengembangan low level UI dan mampu mengembangkan program sederhana mencakup mengenai anchor point text dan animasi image.

Pertemuan 9Kompetensi Dasar : Memahami pengertian persistence

Sub kompetensi : Mahasiswa mampu memahami persistence pada J2ME

Materi pokok :

4.1 Pengertian persistence pada J2ME4.2 Record management System4.3 Record enumerator

Latihan di Lab :

a. Latihan pokok (lihat modul latihan yang ada)

1) Percobaan pertama

Build and Run program ini di WTK2.5Berikan komentar programCatat hasil outputBuat laporan

/* Percobaan keempatbelas: Pemakaian enumerator*/

import javax.microedition.midlet.*;import javax.microedition.lcdui.*;import javax.microedition.rms.*;import java.io.*;

public class RmsFilter extends MIDlet implementsCommandListener,RecordComparator,RecordFilter {Display display;List recList;RecordStore recStore;byte[] data = null;Command exitCommand = new Command("Exit", Command.EXIT, 1);Command newCommand = new Command("New Item", Command.OK, 1);Ticker ticker = new Ticker("D3 Jehnisi Jardiknas FMIPA UNS");

public RmsFilter(){recList = new List("Record List",List.IMPLICIT);dispRec();recList.setTicker(ticker);recList.addCommand(exitCommand);recList.addCommand(newCommand);recList.setCommandListener(this);

}

public void startApp() {if (display == null){

display = Display.getDisplay(this);display.setCurrent(recList);

}}

public void pauseApp() { }public void destroyApp(boolean unconditional) { }

public void commandAction(Command c, Displayable d){if (c == exitCommand){

destroyApp(true);notifyDestroyed(); // Exit

}if (c == newCommand){

try {// Buka dan atau buatlah record store dengan nama “RmsFilter”recStore= RecordStore.openRecordStore("RmsFilter", true);ByteArrayOutputStream out = new ByteArrayOutputStream();DataOutputStream dOut = new DataOutputStream(out);// Menyimpan sebuah integerdOut.writeInt(recStore.getNextRecordID() * recStore.getNextRecordID());// Menyimpan sebuah stringdOut.writeUTF("Record #" + recStore.getNextRecordID());byte[] bytes = out.toByteArray();// Menuliskan Record pada StorerecStore.addRecord(bytes, 0, bytes.length);dOut.close();out.close();recStore.closeRecordStore();

} catch(Exception e){System.out.println(e.toString());

}dispRec();

}}

public void dispRec(){recList.deleteAll();

try {// Membuka atau membuat sebuah record store dengan nama "RmsFilter"recStore = RecordStore.openRecordStore("RmsFilter", true);// Mengambil isi dari record storeRecordEnumeration enumerator= recStore.enumerateRecords(this, this, false);while (enumerator.hasNextElement()){

// Menuju Record selanjutnyabyte[] recBytes = enumerator.nextRecord();ByteArrayInputStream in = new ByteArrayInputStream(recBytes);DataInputStream dIn = new DataInputStream(in);int count = dIn.readInt();String item = dIn.readUTF();recList.append(count+", "+item,null);dIn.close();in.close();}

recStore.closeRecordStore();} catch (Exception e){ }

}

public int compare(byte[] rec1, byte[] rec2){String record1 = new String(rec1).toUpperCase();String record2 = new String(rec2).toUpperCase();//Sorting Ascendingif (record1.compareTo(record2) < 0){

return(PRECEDES);} else {

if (record1.compareTo(record2) > 0){return(FOLLOWS);

} else {return(EQUIVALENT);}

}}

public boolean matches(byte[] candidate){boolean isaMatch = false;try {

ByteArrayInputStream bin = new ByteArrayInputStream(candidate);DataInputStream dIn = new DataInputStream(bin);int count = dIn.readInt();String item = dIn.readUTF();// mendapatkan record dengan akhiran “0”if (item.endsWith("0")){

isaMatch = true;} else {

isaMatch = false;}

} catch (Exception e){recList.append(e.toString(), null); }return(isaMatch);

}}

Hasil program :

2) Percobaan kedua

Build and Run program ini di WTK2.5Berikan komentar programCatat hasil outputBuat laporan

/*Percobaan Duabelas: Pembacaan Record Store*/

import javax.microedition.midlet.*;import javax.microedition.lcdui.*;import javax.microedition.rms.*;

public class RmsList extends MIDlet implements CommandListener {Display display;List recList;RecordStore recStore;byte[] data = null;Command exitCommand = new Command("Exit", Command.EXIT, 1);Ticker ticker = new Ticker("D3 Tehnisi-Jardiknas FMIPA UNS");

public RmsList(){recList = new List("Record Store List",List.IMPLICIT);dispList();recList.setTicker(ticker);recList.addCommand(exitCommand);recList.setCommandListener(this);

}

public void startApp() {if (display == null){

display = Display.getDisplay(this);display.setCurrent(recList);

}}

public void pauseApp() { }public void destroyApp(boolean unconditional) { }

public void commandAction(Command c, Displayable d){if (c == exitCommand){

destroyApp(true);notifyDestroyed(); // Exit

}}

public void dispList(){recList.deleteAll();try {

String[] data = recStore.listRecordStores();if(data.length>0){

for(int i=0;i<data.length;i++)recList.append(data[i],null);

}} catch (Exception e){ }

}}Hasol Program :

Ringkasan

Dengan latihan ini Anda diharapkan menguasai kompetensi memahami pengertian persistence pada J2ME dan mampu mengembangkan program sederhana yang mengacu mengenai enumerator dan record store.

Pertemuan 10Kompetensi Dasar : Memahami pengertian persistence

Sub kompetensi : Mahasiswa mampu memahami persistence pada J2ME

4.4 Materi pok Record comparator4.5 Record filter4.6 Record listener

Latihan di Lab :

a. Latihan pokok (lihat modul latihan yang ada)

1) Percobaan Pertama

Build and Run program ini di WTK2.5Berikan komentar programCatat hasil outputBuat laporan

/* Percobaan KetigaBelas: Pembacaan Record Kedua*/

import javax.microedition.midlet.*;import javax.microedition.lcdui.*;import javax.microedition.rms.*;import java.io.*;

public class RmsExample2 extends MIDlet implements CommandListener {Display display;List recList;RecordStore recStore;byte[] data = null;Command exitCommand = new Command("Exit", Command.EXIT, 1);Command newCommand = new Command("New Item", Command.OK, 1);Ticker ticker = new Ticker("D3 Tehnisi Jardiknas FMIPA UNS");

public RmsExample2(){recList = new List("Record List",List.IMPLICIT);dispRec();recList.setTicker(ticker);recList.addCommand(exitCommand);recList.addCommand(newCommand);recList.setCommandListener(this);

}

public void startApp() {if (display == null){

display = Display.getDisplay(this);

display.setCurrent(recList);}

}

public void pauseApp() { }public void destroyApp(boolean unconditional) { }

public void commandAction(Command c, Displayable d){if (c == exitCommand){

destroyApp(true);notifyDestroyed(); // Exit

}if (c == newCommand){

try {// Buka dan atau buatlah record store dengan nama “RmsExample2”recStore= RecordStore.openRecordStore("RmsExample2", true);ByteArrayOutputStream out = new ByteArrayOutputStream();DataOutputStream dOut = new DataOutputStream(out);// Menyimpan sebuah integerdOut.writeInt(recStore.getNextRecordID() * recStore.getNextRecordID());// Menyimpan sebuah stringdOut.writeUTF("Record #" + recStore.getNextRecordID());byte[] bytes = out.toByteArray();// Menuliskan Record pada StorerecStore.addRecord(bytes, 0, bytes.length);dOut.close();out.close();recStore.closeRecordStore();

} catch(Exception e){System.out.println(e.toString());

}dispRec();

}}

public void dispRec(){recList.deleteAll();try {

// Membuka atau membuat sebuah record store dengan nama "RmsExample2"recStore = RecordStore.openRecordStore("RmsExample2", true);// Mengambil isi dari record storeRecordEnumeration enumerator

= recStore.enumerateRecords(null, null, false);while (enumerator.hasNextElement()){

// Menuju Record selanjutnyabyte[] recBytes = enumerator.nextRecord();ByteArrayInputStream in = new ByteArrayInputStream(recBytes);DataInputStream dIn = new DataInputStream(in);int count = dIn.readInt();String item = dIn.readUTF();recList.append(count+", "+item,null);dIn.close();in.close();

}recStore.closeRecordStore();} catch (Exception e){ }

}} Hasil Program :

Ringkasan

Dengan latihan ini Anda diharapkan menguasai kompetensi memahami pengertian persistence pada J2ME dan mampu mengembangkan program sederhana yang mengacu mengenai record.

Pertemuan 11Kompetensi Dasar : Memahami penggunaan GenericConnection Network

Sub kompetensi : Mahasiswa mampu memahami pengertian GenericConnection Network pada J2ME

Materi pokok :

5.1 Pengertian dan hirarki pada Generic Connection Framework5.2 HTTP Connection

Latihan di Lab :

b. Latihan pokok (lihat modul latihan yang ada)

1) Percobaan Pertama

1. Build and Run program ini di WTK2.52. Berikan komentar program3. Catat hasil output4. Buat laporan

/* Percobaan 15 : Mencoba Koneksi HTTP*/

import javax.microedition.io.*;import java.io.*;import javax.microedition.lcdui.*;import javax.microedition.midlet.*;

public class HttpExample extends MIDlet implements CommandListener{Display display;Form formHttp;Command exitCommand = new Command("Exit", Command.EXIT, 0);HttpConnection connection = null;InputStream iStream = null;byte[] data = null;

public HttpExample(){formHttp = new Form("HTTP Example");formHttp.addCommand(exitCommand);formHttp.setCommandListener(this);try {

connection = (HttpConnection) Connector.open("http://www.ba-stuttgart.de/~weghorn/j2me.txt");

int code = connection.getResponseCode();switch (code){

case HttpConnection.HTTP_OK:iStream = connection.openInputStream();int length = (int) connection.getLength();if (length > 0){

data = new byte[length];int totalBytes = 0;int bytesRead = 0;while ((totalBytes < length)) {

bytesRead = iStream.read(data, totalBytes, length - totalBytes);if (bytesRead > 0){

totalBytes += bytesRead;} else {

break;}

}formHttp.append(new String(data));

} else {//panjang tidak diketahui, baca tiap karakter}

break; default: break;

}} catch (Exception e){

}}

public void startApp(){if (display == null){

display = Display.getDisplay(this);display.setCurrent(formHttp);

}}

public void pauseApp(){ }public void destroyApp(boolean d){ }

public void commandAction(Command c, Displayable d){if (c == exitCommand){

destroyApp(true);notifyDestroyed(); // Exit}

}

}

Hasil Program :

Ringkasan

Dengan latihan ini Anda diharapkan menguasai kompetensi memahami pengertian GenericConnection Network pada J2MEdan mampu mengembangkan program sederhana yang mengacu mengenai HTTP.

Pertemuan 12Kompetensi Dasar : Memahami penggunaan GenericConnection Network

Sub kompetensi : Mahasiswa mampu memahami pengertian GenericConnection Network pada J2ME

Materi pokok :

5.3 HTTPS Connection5.4 TCP Socket Connection

Latihan di Lab :

a. Latihan pokok (lihat modul latihan yang ada)

1) Percobaan Pertama

Build and Run program ini di WTK2.5Berikan komentar programCatat hasil outputBuat laporan

/* Percobaan 17 : Mencoba Koneksi HTTPS **/

import javax.microedition.io.*;import java.io.*;import javax.microedition.lcdui.*;import javax.microedition.midlet.*;

public class HttpsExample extends MIDlet implements CommandListener{Display display;Form formHttps;Command exitCommand = new Command("Exit", Command.EXIT, 0);HttpsConnection connection = null;InputStream iStream = null;byte[] data = null;

public HttpsExample(){formHttps = new Form("HTTPS Example");formHttps.addCommand(exitCommand);formHttps.setCommandListener(this);try {

connection = (HttpsConnection) Connector.open("https://msp.f-secure.com/web-test/");int code = connection.getResponseCode();switch (code){

case HttpConnection.HTTP_OK:iStream = connection.openInputStream();int length = (int) connection.getLength();

if (length > 0){data = new byte[length];int totalBytes = 0;int bytesRead = 0;while ((totalBytes < length)) {

bytesRead = iStream.read(data, totalBytes, length - totalBytes);if (bytesRead > 0){

totalBytes += bytesRead;}else{

break;}

}formHttps.append(new String(data));

} else {//panjang tidak diketahui, baca tiap karakter

}break;

default:break;

}connection.close();

} catch (Exception e){formHttps.append(e.toString());

}}

public void startApp(){if (display == null){

display = Display.getDisplay(this);display.setCurrent(formHttps);

}}

public void pauseApp(){ }public void destroyApp(boolean d){ }

public void commandAction(Command c, Displayable d){if (c == exitCommand){

destroyApp(true);notifyDestroyed(); // Exit

}}

}

Hasil Program :

Ringkasan

Dengan latihan ini Anda diharapkan menguasai kompetensi memahami pengertian GenericConnection Network pada J2MEdan mampu mengembangkan program sederhana yang mengacu mengenai HTTPS.

Pertemuan 13Kompetensi Dasar : Memahami penggunaan Generic Connection Network

Sub kompetensi : Mahasiswa mampu memahami pengertian GenericConnection Network pada J2ME

Materi pokok :

5.5 Server Socket Connection5.6 Datagram Connection

Latihan di Lab :

a. Latihan pokok (lihat modul latihan yang ada)

1) Percobaan Pertama

1. Build and Run program ini di WTK2.52. Berikan komentar program3. Catat hasil output4. Buat laporan

/* Percobaan 16 : Handling Redirect **/

import javax.microedition.io.*;import java.io.*;import javax.microedition.lcdui.*;import javax.microedition.midlet.*;

public class HandlingRedirectExample extends MIDlet implements CommandListener{Display display;Form formHttp;Command exitCommand = new Command("Exit", Command.EXIT, 0);HttpConnection connection = null;InputStream iStream = null;byte[] data = null;

public HandlingRedirectExample(){formHttp = new Form("HTTP Redirect Example");formHttp.addCommand(exitCommand);formHttp.setCommandListener(this);try {

connection = (HttpConnection) Connector.open("http://m.gmail.com");int code = connection.getResponseCode();switch (code){

case HttpConnection.HTTP_MOVED_PERM:case HttpConnection.HTTP_MOVED_TEMP:case HttpConnection.HTTP_SEE_OTHER:

case HttpConnection.HTTP_TEMP_REDIRECT:String newUrl = connection.getHeaderField("Location");formHttp.append("Redirected to : "+newUrl);break;

default:break;

}connection.close();

} catch (Exception e){formHttp.append(e.toString());

}}

public void startApp(){if (display == null){

display = Display.getDisplay(this);display.setCurrent(formHttp);

}}

public void pauseApp(){ }public void destroyApp(boolean d){ }

public void commandAction(Command c, Displayable d){if (c == exitCommand){

destroyApp(true);notifyDestroyed(); // Exit

}}

}

Hasil Program :

Ringkasan

Dengan latihan ini Anda diharapkan menguasai kompetensi memahami pengertian GenericConnection Network pada J2ME.

Pertemuan 14Kompetensi Dasar : Memahami penggunaan Media ke dalam J2ME

Sub kompetensi : Mahasiswa mampu mengembangkan aplikasi penggunaan media khususnya dalam memainkan music dan tones ke dalam J2ME

Materi pokok :

6.1 Menerapkan file music

Latihan di Lab :

a. Latihan pokok (lihat modul latihan yang ada)

import javax.microedition.midlet.*;import javax.microedition.lcdui.*;

import javax.microedition.media.*;import javax.microedition.media.control.*;

public class PlayMusicextends MIDletimplements PlayerListener, CommandListener {

private Display display;private static Player player;private VolumeControl vc;private List list;private Command cmExit, cmStop;

public PlayMusic() {display = Display.getDisplay(this);

}

public void startApp() {cmExit = new Command("Keluar", Command.EXIT, 1);cmStop = new Command("Stop", Command.OK, 1);list = new List("Menu", List.IMPLICIT);list.append("wav", null);list.append("midi", null);list.addCommand(cmExit);list.setCommandListener(this);display.setCurrent(list);

}

public void pauseApp() {}

public void destroyApp(boolean unconditional) {if(player != null){

player.close();

}}

public void commandAction(Command c, Displayable s){if (c == List.SELECT_COMMAND){

switch (list.getSelectedIndex()){case 0:

list.addCommand(cmStop);try {

playMedia("wav.wav", "wav");} catch (Exception e) {

e.printStackTrace(); }break;

case 1:list.addCommand(cmStop);try {

playMedia("mid.mid", "mid");} catch (Exception e) {

e.printStackTrace(); }break;

}}else if(c == cmExit){

exitMIDlet();}else if(c == cmStop){

try{player.stop();if(player != null){

player.close();}

}catch(Exception e){}list.removeCommand(cmStop);

}}

public void exitMIDlet() {destroyApp(false);notifyDestroyed();player = null;

}

private void playMedia(String file, String p) throws Exception {if(p.equals("wav")){

player = Manager.createPlayer(getClass().getResourceAsStream(file), "audio/x-wav");

}else if(p.equals("mid")){player = Manager.createPlayer(getClass().getResourceAsStream(file),

"audio/midi");}else if(p.equals("jts")){

player = Manager.createPlayer(getClass().getResourceAsStream(file), "audio/x-tone-seq");

}

player.addPlayerListener(this);

player.setLoopCount(-1);

player.prefetch(); player.realize();

vc = (VolumeControl)player.getControl("VolumeControl");if (vc != null)

vc.setLevel(100);

player.start(); }

public void playerUpdate(Player player, String event, Object eventData) {if(event.equals(PlayerListener.STARTED) && new Long(0L).equals((Long)eventData)) {} else if(event.equals(PlayerListener.CLOSED)) {}

}};

b. Latihan pengembangan : coba sekarang Anda lakukan membuat program sederhana seperti pada latihan sebelumnya dengan membuat aplikasi media musik dimana jenis musik yang disukai dan jenis music tidak boleh sama dengan yang lainnya.

Ringkasan

Dengan latihan ini Anda diharapkan menguasai kompetensi mengembangkan penggunan media khususnya aplikasi meminkan music kedalam J2ME.

Pertemuan 15Kompetensi Dasar : Memahami penggunaan Media ke dalam J2ME

Sub kompetensi : Mahasiswa mampu mengembangkan aplikasi penggunaan media khususnya dalam memainkan music dan tones ke dalam J2ME

Materi pokok :

6.2 Menerapkan file tone

Latihan di Lab :

1) Percobaan pertama

import javax.microedition.midlet.*;import javax.microedition.lcdui.*;

public class PlayToneextends MIDlet{

private Display display;private ToneCanvas canvas;

public PlayTone() {display = Display.getDisplay(this);

}

public void startApp() {canvas = new ToneCanvas(this, display);display.setCurrent(canvas);

}

public void pauseApp() {}

public void destroyApp(boolean unconditional) {}

public void exitMIDlet() {destroyApp(false);notifyDestroyed();

}};

2) Percobaan kedua class canvas tone

import javax.microedition.lcdui.*;

import javax.microedition.media.*;import javax.microedition.media.control.*;

class ToneCanvas extends Canvas implements CommandListener {private Command cmExit; private String keyText = null; private static final int minNote = 0; private static final int maxNote = 127;private int note = ToneControl.C4; private PlayTone midlet; private Display display;private String[] tone = new String[]{"C","C#","D","D#","E","F","F#","G","G#","A","A#","B"};private int index = 0;

public ToneCanvas(PlayTone midlet, Display display){this.midlet = midlet;this.display = display;cmExit = new Command("Exit", Command.EXIT, 1);addCommand(cmExit);setCommandListener(this);

}

protected void paint(Graphics g){g.setColor(255, 255, 255);g.fillRect(0, 0, getWidth(), getHeight());g.setColor(0, 0, 0);g.drawString("Note : " + tone[index] + " Value : " + Integer.toString(note),

getWidth()/2, getHeight()/2, Graphics.TOP| Graphics.HCENTER);

}

public void commandAction(Command c, Displayable d){if (c == cmExit)midlet.exitMIDlet();

}

protected void keyPressed(int keyCode){switch (keyCode){

case -5:note = ToneControl.C4; break;

case -4:if (note != maxNote){

note++;if(index < (tone.length - 1)){

index++;}else{

index = 0;}

}break;

case -3:if (note != minNote){

note--;if(index > 0){

index--;}else{

index = tone.length - 1;

}}

break;case 49:

note = 60; index = 0;break;

case 50:note = 62; index = 2;break;

case 51:note = 64; index = 4;break;

case 52:note = 65; index = 5;break;

case 53:note = 67; index = 7;break;

case 54:note = 69; index = 9;break;

case 55:note = 71; index = 11;break;

default :break;

}playNote();repaint();

}

private void playNote(){try {

Manager.playTone(note, 300, 100);}catch (Exception e){

Alert alr = new Alert("Error", "Tone tidak dapat dimainkan", null, AlertType.ERROR);

alr.setTimeout(Alert.FOREVER);display.setCurrent(alr, this);

}}

}

b. Latihan pengembangan : coba sekarang Anda lakukan membuat program sederhana seperti pada latihan sebelumnya dengan membuat aplikasi media tones dimana jenis tones yang disukai dan jenis tones tidak boleh sama dengan yang lainnya.

Ringkasan

Dengan latihan ini Anda diharapkan menguasai kompetensi mengembangkan penggunan media khususnya aplikasi meminkan tone kedalam J2ME.