Wednesday, December 5, 2012

Mencari/mem-filter data dalam record store pada JAVA (J2ME)

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.rms.*;
import java.io.IOException;
       
public class DemoCariRecord extends MIDlet
  implements CommandListener {
   
  private Display display;
  private List list;
  private TextField tfCari;
  private RecordStore rs = null;
   
  private final Command cmdKeluar =
    new Command("Keluar", Command.EXIT, 1);
  private final Command cmdKembali =
    new Command("Kembali", Command.BACK, 1);
  private final Command cmdPencarian =
    new Command("Pencarian", Command.SCREEN, 1);
  private final Command cmdCari =
    new Command("Cari", Command.OK, 1);
   
  public DemoCariRecord() {
    display = Display.getDisplay(this);
    list = new List(null, Choice.IMPLICIT);
    list.addCommand(cmdKeluar);
    list.addCommand(cmdPencarian);
    list.setCommandListener(this);
      
    try {
      rs = RecordStore.openRecordStore("DBNama", true);
    } catch (RecordStoreException rse) {
      rse.printStackTrace();
    }
       
  }
   
  public void startApp() {
    try {
      if (rs.getNumRecords() < 1) {
        tambahData("Kiki");
        tambahData("Fira");
        tambahData("Dede");
        tambahData("Mira");
        tambahData("Aryo");
        tambahData("Dona");
      }
    } catch (RecordStoreException rse) {
      rse.printStackTrace();
    }
    tampilkanData(false);
    display.setCurrent(list);
  }
   
  public void pauseApp() {       
  }
   
  public void destroyApp(boolean unconditional) {       
  }
   
  public void commandAction(Command c, Displayable s) {
    if (c == cmdKeluar) {
      destroyApp(false);
      notifyDestroyed();
    } else if (c == cmdKembali) {
      display.setCurrent(list);
      tampilkanData(false);
    } else if (c == cmdPencarian) {
      Form form = new Form("Cari Nama");
      tfCari = new TextField("Masukkan karakter pertama", null,
                              1, TextField.ANY);
      form.append(tfCari);
      form.addCommand(cmdCari);
      form.addCommand(cmdKembali);
      form.setCommandListener(this);
      display.setCurrent(form);
    } else if (c == cmdCari) {
      tampilkanData(true);
    }
  }
   
  public void tambahData(String nama) {
    byte[] temp = null;
           
    try {
      ByteArrayOutputStream baos =
        new ByteArrayOutputStream();
      DataOutputStream dos = new DataOutputStream(baos);
      dos.writeUTF(nama);
      temp = baos.toByteArray();
    } catch (IOException ioe) {
      ioe.printStackTrace();
    }
     
    try {
      rs.addRecord(temp, 0, temp.length);
    } catch (RecordStoreNotOpenException rsnoe) {
      rsnoe.printStackTrace();
    } catch (RecordStoreException rse) {
      rse.printStackTrace();
    }
  }
   
  public void tampilkanData(boolean filter) {
    byte[] temp = null;
    RecordEnumeration re = null;

    list.deleteAll();
    try {           
      if (filter) {
        String s = tfCari.getString().toLowerCase();
        CariNama cn = new CariNama(s);
        re = rs.enumerateRecords(cn, null, false);
        list.setTitle("Hasil Pencarian");
        list.removeCommand(cmdPencarian);
        list.removeCommand(cmdKeluar);
        list.addCommand(cmdKembali);
      } else {
        re = rs.enumerateRecords(null, null, false);
        list.setTitle("Daftar Nama");
        list.addCommand(cmdPencarian);
        list.addCommand(cmdKeluar);
        list.removeCommand(cmdKembali);
      }
      while (re.hasNextElement()) {
        int i = re.nextRecordId();               
        temp = rs.getRecord(i);
        ByteArrayInputStream bais =
          new ByteArrayInputStream(temp);
        DataInputStream dis = new DataInputStream(bais);
        try {
          String nama = dis.readUTF();
          list.append(nama, null);
        } catch (IOException ioe) {
          ioe.printStackTrace();
        }
      }
      display.setCurrent(list);
    } catch (InvalidRecordIDException invID) {
      invID.printStackTrace();
    } catch (RecordStoreNotOpenException rsnoe) {
      rsnoe.printStackTrace();
    } catch (RecordStoreException rse) {
      rse.printStackTrace();
    }   
     
    display.setCurrent(list);
  }
   
  // inner class untuk mencari data
  class CariNama implements RecordFilter {
       
    private String karakterAwal;
       
    public CariNama(String karakterAwal) {
      this.karakterAwal = karakterAwal.toLowerCase();
    }
       
    public boolean matches(byte[] candidate) {
      String s =
        new String(candidate).toLowerCase().substring(2);           
      return s.startsWith(karakterAwal);
    }
  }
   
}

Membuat ticker sederhana pada JAVA (J2ME)

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




public class TickerSederhana extends MIDlet
  implements CommandListener {
   
  private Display display;
  private Form form;
  private Ticker ticker;
  private StringItem si;
   
  private String teksTicker =
    "Pesan yang dimunculkan sebagai ticker...";
  private String isiLayar =
    "Aplikasi ini menunjukkan bagaimana cara " +
    "membuat ticker sederhana";
   
  private final Command cmdKeluar =
    new Command("Keluar", Command.EXIT, 1);
   
  public TickerSederhana() {
    display = Display.getDisplay(this);
  }
   
  public void startApp() {       
       
    form = new Form("Ticker Sederhana");
       
    ticker = new Ticker(teksTicker);             
    form.setTicker(ticker);
       
    si = new StringItem(null, isiLayar);
    form.append(si);
       
    form.addCommand(cmdKeluar);
    form.setCommandListener(this);       

    display.setCurrent(form);
  }
   
  public void pauseApp() {
  }
   
  public void destroyApp(boolean unconditional) {
  }
   
  public void commandAction(Command c, Displayable s) {
    if (c == cmdKeluar) {
      destroyApp(false);
      notifyDestroyed();
    }
  }              
}

Mengubah Isi Ticker pada JAVA (J2ME)

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



public class ContohTicker5 extends MIDlet
  implements CommandListener {
   
  private Display display;
  private Form form;
  private Ticker ticker;
  private StringItem si;
   
  private static final long SLEEP_TIME = 40000;
  private boolean isIklanPertama;
 
  private String teksTickerPertama = "Pesan atau informasi ke-1";
  private String teksTickerKedua = "Pesan atau informasi ke-2";
   
  private String isiLayar =
    "Pada aplikasi ini kita dapat mengubah isi ticker " +
    "secara dinamis";  
   
  private final Command cmdKeluar =
    new Command("Keluar", Command.EXIT, 1);
   
  public ContohTicker5() {
    display = Display.getDisplay(this);
  }
   
  public void startApp() {       
       
    PenggantiIsiTicker thread = new PenggantiIsiTicker();
    thread.start();
   
    form = new Form("Contoh Ticker ke-5");
       
    ticker = new Ticker(teksTickerPertama);             
    form.setTicker(ticker);
                                   
    si = new StringItem(null, isiLayar);
    form.append(si);
    form.addCommand(cmdKeluar);
    form.setCommandListener(this);
    
    display.setCurrent(form);
  }
   
  public void pauseApp() {
  }
   
  public void destroyApp(boolean unconditional) {
  }
   
  public void commandAction(Command c, Displayable s) {
    if (c == cmdKeluar) {
      destroyApp(false);
      notifyDestroyed();
    }
  }
 
  // inner class
  class PenggantiIsiTicker extends Thread {
     
      public void PenggantiIsiTicker() {         
      }
     
      public void run() {
          while (true) {
              try {
                  Thread.sleep(SLEEP_TIME);
              } catch (InterruptedException ie) {
                  ie.printStackTrace();
              }
              if (isIklanPertama) {
                  isIklanPertama = false;
                  ticker.setString(teksTickerPertama);
              } else {
                  ticker.setString(teksTickerKedua);
                  isIklanPertama = true;
              }
          }
      }
  }
}

Membuat ticker yang berbeda untuk masing-masing layar pada JAVA (J2ME)

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

public class ContohTicker4 extends MIDlet
  implements CommandListener {
   
  private Display display;
  private Form formMenu;
  private Form formInfo;
  private Ticker tickerMenu;
  private Ticker tickerInfo;
  private ChoiceGroup pilihan;
  private StringItem deskripsi;
   
  private String teksTickerMenu =
    "Delphi, C++Builder, dan JBuilder...";
  private String teksTickerInfo = "Produk Borland...";
   
  private String infoDelphi =
    "Delphi adalah development tool buatan Borland " +
    "yang menggunakan bahasa Object Pascal";
   
  private String infoCppBuilder =
    "C++Builder adalah development tool buatan Borland " +
    "yang menggunakan bahasa C++";
   
  private String infoJBuilder =
    "JBuilder adalah development tool buatan Borland " +
    "yang menggunakan bahasa Java";
   
  private String[] menu = {
    "Delphi",
    "C++Builder",
    "JBuilder"
  };
   
  private final Command cmdKeluar =
    new Command("Keluar", Command.EXIT, 1);
  private final Command cmdPilih =
    new Command("Pilih", Command.OK, 1);
  private final Command cmdKembali =
    new Command("Kembali", Command.BACK, 1);
   
  public ContohTicker4() {
    display = Display.getDisplay(this);
  }
   
  public void startApp() {       
       
    formMenu = new Form("Contoh Ticker ke-4");
       
    tickerMenu = new Ticker(teksTickerMenu);             
    formMenu.setTicker(tickerMenu);
                               
    pilihan = new ChoiceGroup("Development Tool:",
                  Choice.EXCLUSIVE, menu, null);
    formMenu.append(pilihan);
       
    formMenu.addCommand(cmdKeluar);
    formMenu.addCommand(cmdPilih);
    formMenu.setCommandListener(this);       
       
    formInfo = new Form("Informasi");
    deskripsi = new StringItem(null, null);
       
    tickerInfo = new Ticker(teksTickerInfo);
    formInfo.setTicker(tickerInfo);
       
    formInfo.append(deskripsi);       
    formInfo.addCommand(cmdKembali);
    formInfo.setCommandListener(this);
    
    display.setCurrent(formMenu);
  }
   
  public void pauseApp() {
  }
   
  public void destroyApp(boolean unconditional) {
  }
   
  public void commandAction(Command c, Displayable s) {
    if (c == cmdKeluar) {
      destroyApp(false);
      notifyDestroyed();
    } else if (c == cmdPilih) {
      switch (pilihan.getSelectedIndex()) {
        case 0: deskripsi.setText(infoDelphi); break;
        case 1: deskripsi.setText(infoCppBuilder); break;
        case 2: deskripsi.setText(infoJBuilder); break;
      }
      display.setCurrent(formInfo);
    } else if (c == cmdKembali) {
      display.setCurrent(formMenu);
    }
  }              
}

Ticker yang digunakan bersama-sama oleh dua layar pada JAVA (J2ME)

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





public class ContohTicker3 extends MIDlet
  implements CommandListener {
   
  private Display display;
  private Form formMenu;
  private Form formInfo;
  private Ticker ticker;
  private ChoiceGroup pilihan;
  private StringItem deskripsi;
   
  private String teksTicker =
    "Delphi, C++Builder, dan JBuilder...";
   
  private String infoDelphi =
    "Delphi adalah development tool buatan Borland " +
    "yang menggunakan bahasa Object Pascal";
   
  private String infoCppBuilder =
    "C++Builder adalah development tool buatan Borland " +
    "yang menggunakan bahasa C++";

  private String infoJBuilder =
    "JBuilder adalah development tool buatan Borland " +
    "yang menggunakan bahasa Java";
   
  private String[] menu = {
    "Delphi",
    "C++Builder",
    "JBuilder"
  };
   
  private final Command cmdKeluar =
    new Command("Keluar", Command.EXIT, 1);
  private final Command cmdPilih =
    new Command("Pilih", Command.OK, 1);
  private final Command cmdKembali =
    new Command("Kembali", Command.BACK, 1);
   
  public ContohTicker3() {
    display = Display.getDisplay(this);
  }
   
  public void startApp() {               
    formMenu = new Form("Contoh Ticker ke-3");     
    ticker = new Ticker(teksTicker);             
    formMenu.setTicker(ticker);
                               
    pilihan = new ChoiceGroup("Development Tool:",
                  Choice.EXCLUSIVE, menu, null);
    formMenu.append(pilihan);
       
    formMenu.addCommand(cmdKeluar);
    formMenu.addCommand(cmdPilih);
    formMenu.setCommandListener(this);       
       
    formInfo = new Form("Informasi");
    deskripsi = new StringItem(null, null);

    formInfo.setTicker(ticker);    // baris yang ditambahkan

    formInfo.append(deskripsi);
    formInfo.addCommand(cmdKembali);
    formInfo.setCommandListener(this);
    
    display.setCurrent(formMenu);
  }
   
  public void pauseApp() {
  }
   
  public void destroyApp(boolean unconditional) {
  }
   
  public void commandAction(Command c, Displayable s) {
    if (c == cmdKeluar) {
      destroyApp(false);
      notifyDestroyed();
    } else if (c == cmdPilih) {
      switch (pilihan.getSelectedIndex()) {
        case 0: deskripsi.setText(infoDelphi); break;
        case 1: deskripsi.setText(infoCppBuilder); break;
        case 2: deskripsi.setText(infoJBuilder); break;
      }
      display.setCurrent(formInfo);
    } else if (c == cmdKembali) {
      display.setCurrent(formMenu);
    }
  }              
}

Tuesday, December 4, 2012

Ticker untuk satu layar pada JAVA (J2ME)

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





public class ContohTicker2 extends MIDlet
  implements CommandListener {
   
  private Display display;
  private Form formMenu;
  private Form formInfo;
  private Ticker ticker;
  private ChoiceGroup pilihan;
  private StringItem deskripsi;
   
  private String teksTicker =
    "Delphi, C++Builder, dan JBuilder...";
   
  private String infoDelphi =
    "Delphi adalah development tool buatan Borland " +
    "yang menggunakan bahasa Object Pascal";
   
  private String infoCppBuilder =
    "C++Builder adalah development tool buatan Borland " +
    "yang menggunakan bahasa C++";

  private String infoJBuilder =
    "JBuilder adalah development tool buatan Borland " +
    "yang menggunakan bahasa Java";
   
  private String[] menu = {
    "Delphi",
    "C++Builder",
    "JBuilder"
  };
   
  private final Command cmdKeluar =
    new Command("Keluar", Command.EXIT, 1);
  private final Command cmdPilih =
    new Command("Pilih", Command.OK, 1);
  private final Command cmdKembali =
    new Command("Kembali", Command.BACK, 1);
   
  public ContohTicker2() {
    display = Display.getDisplay(this);
  }
   
  public void startApp() {       
       
    formMenu = new Form("Contoh Ticker ke-2");
       
    ticker = new Ticker(teksTicker);             
    formMenu.setTicker(ticker);
                               
    pilihan = new ChoiceGroup("Development Tool:",
                  Choice.EXCLUSIVE, menu, null);
    formMenu.append(pilihan);
       
    formMenu.addCommand(cmdKeluar);
    formMenu.addCommand(cmdPilih);
    formMenu.setCommandListener(this);       
       
    formInfo = new Form("Informasi");
    deskripsi = new StringItem(null, null);
    formInfo.append(deskripsi);
    formInfo.addCommand(cmdKembali);
    formInfo.setCommandListener(this);
    
    display.setCurrent(formMenu);
  }
   
  public void pauseApp() {
  }
   
  public void destroyApp(boolean unconditional) {
  }
   
  public void commandAction(Command c, Displayable s) {
    if (c == cmdKeluar) {
      destroyApp(false);
      notifyDestroyed();
    } else if (c == cmdPilih) {
      switch (pilihan.getSelectedIndex()) {
        case 0: deskripsi.setText(infoDelphi); break;
        case 1: deskripsi.setText(infoCppBuilder); break;
        case 2: deskripsi.setText(infoJBuilder); break;
      }
      display.setCurrent(formInfo);
    } else if (c == cmdKembali) {
      display.setCurrent(formMenu);
    }
  }              
}

Menggunakan objek StringItem dan ImageItem, pada JAVA (J2ME)

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









public class StringImageMIDlet extends MIDlet
    implements CommandListener {
   
    private Display display;
    private Form form;
    private StringItem si = null;
    private ImageItem ii = null;
    private final Command cmdKeluar = new Command("Keluar",
    Command.EXIT, 1);
           
    public StringImageMIDlet() {
        display = Display.getDisplay(this);
    }
   
    public void startApp() {
        form = new Form("StringItem dan ImageItem");
        // membuat instance dari kelas StringItem
        si = new StringItem(null, "Gambar Java", Item.PLAIN);
        si.setFont(Font.getFont(Font.FACE_MONOSPACE,
                Font.STYLE_ITALIC | Font.STYLE_UNDERLINED,
            Font.SIZE_MEDIUM));
        // membuat gambar yang akan dimasukkan ke objek ImageItem
        Image image = null;
        try {
            image = Image.createImage("/Java.png");
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
        // membuat instance dari kelas ImageItem
        ii = new ImageItem(null, image,
                Item.LAYOUT_NEWLINE_BEFORE, null);
        form.append(si);
        form.append(ii);
        form.addCommand(cmdKeluar);
        form.setCommandListener(this);
        display.setCurrent(form);
    }
   
    public void pauseApp() {
    }
   
    public void destroyApp(boolean unconditional) {
        notifyDestroyed();
    }
   
    public void commandAction(Command c, Displayable s) {
        if (c == cmdKeluar) {
            destroyApp(false);
        }
    }
   
}