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

Mobile Programming dengan Java J2ME

Oct 23, 2015

Download

Documents

Candrasta

Mobile Programming dengan Java J2ME
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 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

Page 2: Mobile Programming dengan Java J2ME

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) {

Page 3: Mobile Programming dengan Java J2ME

}}

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

Page 4: Mobile Programming dengan Java J2ME

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()

Page 5: Mobile Programming dengan Java J2ME

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

Page 6: Mobile Programming dengan Java J2ME

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

}}

}

Page 7: Mobile Programming dengan Java J2ME

Ringkasan

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

Page 8: Mobile Programming dengan Java J2ME

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);

}

Page 9: Mobile Programming dengan Java J2ME

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

Page 10: Mobile Programming dengan Java J2ME

\

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.*;

Page 11: Mobile Programming dengan Java J2ME

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 :

Page 12: Mobile Programming dengan Java J2ME

Ringkasan

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

Page 13: Mobile Programming dengan Java J2ME

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 = {

Page 14: Mobile Programming dengan Java J2ME

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 :

Page 15: Mobile Programming dengan Java J2ME

Ringkasan

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

Page 16: Mobile Programming dengan Java J2ME

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);}

Page 17: Mobile Programming dengan Java J2ME

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

Page 18: Mobile Programming dengan Java J2ME

/* 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

Page 19: Mobile Programming dengan Java J2ME

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

Page 20: Mobile Programming dengan Java J2ME

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 :

Page 21: Mobile Programming dengan Java J2ME

Ringkasan

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

Page 22: Mobile Programming dengan Java J2ME

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() {

Page 23: Mobile Programming dengan Java J2ME

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

Page 24: Mobile Programming dengan Java J2ME

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);

Page 25: Mobile Programming dengan Java J2ME

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 :

Page 26: Mobile Programming dengan Java J2ME

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);

Page 27: Mobile Programming dengan Java J2ME

}

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);

}

Page 28: Mobile Programming dengan Java J2ME

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 :

Page 29: Mobile Programming dengan Java J2ME

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.

Page 30: Mobile Programming dengan Java J2ME

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);

Page 31: Mobile Programming dengan Java J2ME

}

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) {

Page 32: Mobile Programming dengan Java J2ME

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 :

Page 33: Mobile Programming dengan Java J2ME

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;

Page 34: Mobile Programming dengan Java J2ME

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

Page 35: Mobile Programming dengan Java J2ME

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.

Page 36: Mobile Programming dengan Java J2ME

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);

Page 37: Mobile Programming dengan Java J2ME

}

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();}

Page 38: Mobile Programming dengan Java J2ME

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 :

Page 39: Mobile Programming dengan Java J2ME

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){

Page 40: Mobile Programming dengan Java J2ME

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.

Page 41: Mobile Programming dengan Java J2ME

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);

Page 42: Mobile Programming dengan Java J2ME

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 :

Page 43: Mobile Programming dengan Java J2ME

Ringkasan

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

Page 44: Mobile Programming dengan Java J2ME

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 {

Page 45: Mobile Programming dengan Java J2ME

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}

}

Page 46: Mobile Programming dengan Java J2ME

}

Hasil Program :

Ringkasan

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

Page 47: Mobile Programming dengan Java J2ME

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();

Page 48: Mobile Programming dengan Java J2ME

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 :

Page 49: Mobile Programming dengan Java J2ME

Ringkasan

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

Page 50: Mobile Programming dengan Java J2ME

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:

Page 51: Mobile Programming dengan Java J2ME

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

Page 52: Mobile Programming dengan Java J2ME

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

Page 53: Mobile Programming dengan Java 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();

Page 54: Mobile Programming dengan Java J2ME

}}

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);

Page 55: Mobile Programming dengan Java J2ME

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.

Page 56: Mobile Programming dengan Java 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.*;

Page 57: Mobile Programming dengan Java J2ME

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;

Page 58: Mobile Programming dengan Java J2ME

}}

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.

Page 59: Mobile Programming dengan Java J2ME

Ringkasan

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