Belajar LWUIT J2ME Menggunakan NetBeans IDE | StripBandunk


Artikel sebelumnya kami telah membahas tentang belajar Java Mobile (J2ME) menggunakan NetBeans IDE. Pada artikel ini kami akan membahas tentang LightWeight User Interface Toolkit (LWUIT), dan cara membuat aplikasi menggunakan LWUIT menggunakan NetBeans IDE.

LWUIT merupakan library yang berisikan widget-widget untuk Java Mobile. LWUIT mirip dengan Java Swing, jika Anda sudah terbiasa membuat aplikasi berbasis Java Swing, maka tidak akan sulit mempelajari LWUIT, yang menjadi perbedaannya, Java Swing untuk membangun aplikasi GUI diatas Desktop, sedangkan LWUIT untuk membangun aplikasi GUI diatas Mobile.

Baca Lebih Lanjut.

Iklan

Belajar Java Micro Edition Menggunakan NetBeans IDE | StripBandunk


Pada artikel ini kami akan membahasa tentang belajar membuat aplikasi mobile sederhana Java Micro Edition menggunakan NetBeans IDE. Aplikasi yang akan dibuat hanyalah aplikasi Hello World berbasiskan MIDP.

Peralatan yang diperlukan dalam artikel ini adalah :

  • Java Wireless Toolkit 2.5.2
  • NetBeans IDE 7.0.1
  • Java Development Kit 7.0

Membuat Project

Untuk membuat project Java Mobile pastikan bahwa yang fitur Java Mobile telah terinstall di NetBeans IDE Anda. Jika Anda hanya mengunduh NetBeans yang versi Java SE, maka fitur untuk Java ME tidak akan ada. Jadi Anda harus mengunduh NetBeans yang versi Full.

Belajar Java Micro Edition Menggunakan NetBeans IDE | StripBandunk.

Memanfaatkan ConcurrentLinkedQueue sebagai Manajeman Tugas yang Multithreaded


Membangun sistem yang multithreaded tidaklah mudah, banyak sekali yang harus diperhatikan, seperti syncronisasi resource yang digunakan antar thread sampai jangan sampai terjadi deadlock pada sistem yang dibangun. Contohnya jika kita membangun sebuah sistem berbasis client-server, maka otomatis server harus dapat menangani permintaan client yang terjadi secara bersamaan.

Misal ada sebuah Bank, bank tersebut tidak melakukan sistem antrian untuk nasabah yang datang ke Bank tersebut, sehingga nasabah dapat seenaknya datang ke teller. Bisa dibayangkan apa yang akan terjadi saat teller hanya ada 5 dan nasabah sekaligus datang sebanyak 50 orang, maka bisa dipastikan teller akan kewalahan menanganinya, bahkan bisa jadi teller salah melakukan pelayanan.

Namun berbeda jika Bank tersebut menggunakan sistem antrian, maka otomatis dengan begitu, satu teller akan menangani satu nasabah. Bahkan walaupun pada Bank tersebut hanya ada satu teller, maka jika yang datang ada 100, maka teller tersebut tetap dapat menanganinya karena adanya sistem antrian, sehingga hanya satu nasabah yang dapat datang ke teller, dan nasabah yang lainnya harus menunggu sampai nasabah yang berada didepannya selesai bertransaksi dengan teller.

Sekarang kembali ke topik…

Misal kita membangun sebuah sistem berbasiskan client-server, dimana terdapat sebuah server dan banyak client. Client dapat melakukan permintaan ke server, permintaan tersebut bisa berupa request data atau perintah menjalankan tugas. Request dari client bisa datang kapan saja, sehingga bisa saja pada saat yang bersamaan beberapa client melakukan request ke server. Jika kita tidak menggunakan sistem antrian, maka kejadian pada Bank sebelum menggunakan proses antrian dapat terjadi. Dengan begitu perlu dilakukan sistem antrian pada sistem server, sehingga proses request dari client dapat dieksekusi satu per satu oleh server.

Dalam java, struktur data antrian adalah Queue, namun Queue tidaklah thread safe. Karena sistem yang dibangun berbasiskan miltithread, maka kita dapat menggunakan ConcurrentLinkedQueue, yang merupakan Queue thread safe.

package khannedy.learning.queue;

import java.util.concurrent.ConcurrentLinkedQueue;

public class Server implements Runnable {

	private ConcurrentLinkedQueue<Tugas> queue = new ConcurrentLinkedQueue<Tugas>();
	private Thread thread;

	public Server() {
		thread = new Thread(this);
	}

	public void tambahTugas(Tugas tugas) {
		queue.offer(tugas);
	}

	public void startServer() {
		thread.start();
	}

	public void stopServer() {
		thread.interrupt();
	}

	@Override
	public void run() {
		while (!thread.isInterrupted()) {
			Tugas tugas = queue.poll();
			if (tugas != null) {
				// eksekusi tugas...
			}
		}
	}

}

Kode diatas adalah contoh sederhana dari sistem server, metode startServer() digunakan untuk menjalankan server, metode stopServer() digunakan untuk menghentikan server dan metode tambahTugas(Tugas) digunakan untuk menambah tugas, metode tambahTugas(Tugas) digunakan oleh client untuk menambahkan tugas ke server.

Resource untuk Belajar JavaSE, JavaEE, JavaDB, JavaME, JavaFX


Kadang suka banyak yang chating menanyakan resource untuk belajar Java, baik itu java desktop, java web dan lain-lain. Supaya gampang nanti ngasih link resourcenya, saya gabungkan saja diartikel ini :

  1. Java Standard Edition : http://download.oracle.com/javase/
  2. Java Enterprise Edition : http://download.oracle.com/javaee/
  3. Java Database : http://download.oracle.com/javadb/
  4. Java Micro Edition : http://download.oracle.com/javame/
  5. JavaFX : http://download.oracle.com/javafx/

Silahkan belajar….

Membangun Aplikasi CRUD Java Swing Menggunakan Konsep Model-View-Controller Ruby on Rails Bagian 2


Artikel sebelumnya “Membangun Aplikasi CRUD Java Swing Menggunakan Konsep Model-View-Controller Ruby on Rails” sudah selesai. Namun ada beberapa masalah yang seperti dituliskan pada bagian akhir artikel sebelumnya itu, yaitu :

  1. Harusnya saat di klik INSERT, setelah data sukses dimasukkan ke database dan tabel, harusnya data di form jadi clear.
  2. Harusnya saat baris tabel terseleksi, data langsung ada di form, jadi kalo mau Update gampang πŸ˜€

Jadi dari sini diperlukan sebuah aksi RESET ya itu aksi yang menghapuskan seluruh text form sehingga kosong, dan juga aksi SELECT ROW, yang menampilkan data baris tabel yang terseleksi ke form. Dari sini perlu kita tambahkan 2 buah aksi dalam Controller-nya, yaitu aksi reset() dan aksi selectRow() :

    public void reset(){
	view.getTextFirstName().setText(null);
	view.getTextLastName().setText(null);
    }

    public void selectRow() {
	// dapatkan baris yang terseleksi
	int index = view.getTablePerson().getSelectedRow();
	// jika ada yang terseleksi
	if (index != -1) {
	    // ambil data person dari tablemodel
	    Person person = view.getTableModelPerson().select(index);
	    // tampilkan di form
	    view.getTextFirstName().setText(person.getFirstName());
	    view.getTextLastName().setText(person.getLastName());
	}
    }

Dan selain itu kita perlu mengubah aksi tombol buttonInsert menjadi :

    private void buttonInsertActionPerformed(java.awt.event.ActionEvent evt) {
	// TODO add your handling code here:
	controller.insert();
	controller.reset();
    }

Dan juga perlu menambahkan aksi saat tabel terseleksi, sehingga kita harus mengubah konstruktor PersonView menjadi seperti dibawah ini :

public class PersonView extends javax.swing.JFrame {

    private TableModelPerson tableModelPerson;

    private PersonController controller;

    /** Creates new form PersonView */
    public PersonView() {
	initComponents();

	tableModelPerson = new TableModelPerson();
	tablePerson.setModel(tableModelPerson);

	controller = new PersonController(this);
	controller.select();

	tablePerson.getSelectionModel().addListSelectionListener(new ListSelectionListener() {

	    public void valueChanged(ListSelectionEvent e) {
		controller.selectRow();
	    }
	});
    }

Dan sekarang selesai, tinggal kita jalankan aplikasinya πŸ˜€

Download SourceCode

Silahkan download sourcecodenya –> disini <–

Memuat Data Secara Otomatis Saat JComboBox di Klik


Peralatan yang diperlukan :

  1. Java Development Kit 1.6
  2. NetBeans IDE 6.8
  3. MySQL Server 5.1

Pernah berurusan dengan JComboBox? Pastinya πŸ˜€ Biasanya untuk masukan data yang sudah fix atau sudah ada dalam database, kita selalu menggunakan JComboBox, atau jika masukan data boleh lebih dari satu, kita biasa menggunakan JList.

Pada artikel kali ini saya akan membahas tentang bagaimana cara meload (memuat) data otomatis saat JComboBox diklik.Mungkin hal ini tidak akan berpengaruh jika datanya fix, seperti jenis kelamin misalnya, yang pilihannya hanya “laki-laki” dan “perempuan’, tapi bagaimana jika dengan kategori barang? atau yang sejenisnya yang bisa mengalami penambahan data πŸ˜€

Membuat Database

Anggap saja kita sekarang akan membuat JComboBox untuk meload kategori barang, jadi sebelumnya kita buat dulu database untuk ini dan juga tabel kategori :

mysql> create database combobox;
Query OK, 1 row affected (0.01 sec)

mysql> use combobox;
Database changed
mysql> create table kategori_barang(
    -> id integer primary key auto_increment,
    -> nama varchar(45) not null
    -> );
Query OK, 0 rows affected (0.00 sec)

Setelah membuat database dan tabel, saatnya mengisi datanya, misal kita isi datanya dengan beberapa kategori seperti yang ada terlihat pada kode dibawah ini :

mysql> insert into kategori_barang (nama) values
    -> ('Makanan'),
    -> ('Minuman'),
    -> ('Alat Tulis'),
    -> ('Sayuran');
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

dan hasilnya :

mysql> select * from kategori_barang;
+----+------------+
| id | nama       |
+----+------------+
|  1 | Makanan    |
|  2 | Minuman    |
|  3 | Alat Tulis |
|  4 | Sayuran    |
+----+------------+
4 rows in set (0.00 sec)

Sekarang selesai membuat database, tabel dan mengisi datanya.

Membuat Koneksi

Setelah membuat database, saatnya membuat koneksi dari program ke database. Pada artikel ini saya menggunakan JDBC untuk koneksi ke database nya. Caranya dengan membuat kelas ConnectionHelper, atau apapun terserah πŸ˜€

package khannedy.comboboxotomatis;

import java.sql.Connection;
import java.sql.DriverManager;

/**
 * @author Eko Kurniawan Khannedy
 */
public class DatabaseHelper {

    private static Connection connection;

    public static Connection getConnection() {
	if (connection == null) {
	    try {
		Class.forName("com.mysql.jdbc.Driver");
		connection = DriverManager.getConnection(
			"jdbc:mysql://localhost:3306/combobox",
			"username",
			"password");
	    } catch (Throwable t) {
	    }
	}
	return connection;
    }
}

Membuat Form

Sedernaha saja, kita langsung ke tujuan dari permasalahannya, yaitu meload otomatis data yang ada di database saat JComboBox di klik. Pertama buat JComboBox dengan nama comboKategori, atau apapu terserah πŸ˜€

Setelah itu tambahkan aksi ke JComboBox, tapi ingat!, aksinya bukan onMouseClick, tapi aksi untuk popup, caranya Klik Kanan pilih Events -> PopupMenu -> popupMenuWillBecomeVisible, dan setelah itu tambahkan kode dibawah ini untuk meload seluruh data kategori ke combobox :

    private void comboKategoriPopupMenuWillBecomeVisible(javax.swing.event.PopupMenuEvent evt) {

	// hapus seluruh data combobox
	comboKategori.removeAllItems();

	// load data dari database ke combobox
	Statement statement = null;
	ResultSet resultSet = null;
	try {
	    statement = DatabaseHelper.getConnection().createStatement();
	    resultSet = statement.executeQuery("select nama from kategori_barang");
	    while (resultSet.next()) {
		String kategori = resultSet.getString("nama");
		comboKategori.addItem(kategori);
	    }
	} catch (SQLException ex) {
	} finally {
	    try {
		if (resultSet != null) {
		    resultSet.close();
		}
	    } catch (SQLException ex) {
	    }
	    try {
		if (statement != null) {
		    statement.close();
		}
	    } catch (SQLException ex) {
	    }
	}
    }

Setelah itu jalankan… dan ow kok error?

run:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:169)
        at khannedy.comboboxotomatis.DatabaseHelper.getConnection(DatabaseHelper.java:21)
        at khannedy.comboboxotomatis.Form.comboKategoriPopupMenuWillBecomeVisible(Form.java:89)
        at khannedy.comboboxotomatis.Form.access$000(Form.java:23)
        at khannedy.comboboxotomatis.Form$1.popupMenuWillBecomeVisible(Form.java:50)
        at javax.swing.JComboBox.firePopupMenuWillBecomeVisible(JComboBox.java:938)
        at javax.swing.plaf.basic.BasicComboPopup.firePopupMenuWillBecomeVisible(BasicComboPopup.java:330)
        at javax.swing.JPopupMenu.setVisible(JPopupMenu.java:730)
        at javax.swing.JPopupMenu.show(JPopupMenu.java:904)
        at javax.swing.plaf.basic.BasicComboPopup.show(BasicComboPopup.java:191)
        at javax.swing.plaf.basic.BasicComboPopup.togglePopup(BasicComboPopup.java:1110)
        at javax.swing.plaf.basic.BasicComboPopup$Handler.mousePressed(BasicComboPopup.java:807)
        at java.awt.Component.processMouseEvent(Component.java:6260)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6028)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4235)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at khannedy.comboboxotomatis.Form.comboKategoriPopupMenuWillBecomeVisible(Form.java:89)
        at khannedy.comboboxotomatis.Form.access$000(Form.java:23)
        at khannedy.comboboxotomatis.Form$1.popupMenuWillBecomeVisible(Form.java:50)
        at javax.swing.JComboBox.firePopupMenuWillBecomeVisible(JComboBox.java:938)
        at javax.swing.plaf.basic.BasicComboPopup.firePopupMenuWillBecomeVisible(BasicComboPopup.java:330)
        at javax.swing.JPopupMenu.setVisible(JPopupMenu.java:730)
        at javax.swing.JPopupMenu.show(JPopupMenu.java:904)
        at javax.swing.plaf.basic.BasicComboPopup.show(BasicComboPopup.java:191)
        at javax.swing.plaf.basic.BasicComboPopup.togglePopup(BasicComboPopup.java:1110)
        at javax.swing.plaf.basic.BasicComboPopup$Handler.mousePressed(BasicComboPopup.java:807)
        at java.awt.Component.processMouseEvent(Component.java:6260)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6028)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4235)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
BUILD SUCCESSFUL (total time: 7 seconds)

Tenang, tenang πŸ˜€ itu cuma driver MySQL nya belum di include ke Project, tinggal klik tambahkan MySQL Driver ke library project dan sekarang bisa dijalankan :

Sekarang coba tambahkan lagi datanya di database :

mysql> insert into kategori_barang (nama) values
    -> ('Data Baru Coy');
Query OK, 1 row affected (0.00 sec)

mysql> select * from kategori_barang;
+----+---------------+
| id | nama          |
+----+---------------+
|  1 | Makanan       |
|  2 | Minuman       |
|  3 | Alat Tulis    |
|  4 | Sayuran       |
|  5 | Data Baru Coy |
+----+---------------+
5 rows in set (0.00 sec)

Dan tanpa harus me restart aplikasi, otomatis data akan dimuat ulang saat popup menu JComboBox keluar :

Mudah bukan? πŸ˜€

Download SourceCode

Silahkan download sourcecode artikel ini –> disini <–

Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8


Mau melakukan migrasi dari pure JDBC ke JPA?

Mungkin suatu saat kita akan melakukan migrasi dari aplikasi yang menggunakan JDBC ke JPA, namun yang menjadi permasalahan adalah, tabel-tabel sudah ada di database, dan tidak mungkin membuat ulang tabel-tablenya. Kalaupun mau, paling kita harus membuat entity-entity class nya secara manual, dan mapping nya harus sama dengan tabel yang ada di database. No problem selama banyak tabelnya dibawah 20 :D, tapi bagaiman jika total tabel nya ada 50? 😦 #capekkayaknya

Jika kita menggunakan NetBeans IDE, ini bukan masalah πŸ˜€ Kenapa? Karena NetBeans punya fitur otomatis pembuat class entity dari tabel yang ada di database, jadi kita tidak perlu membuatnya secara manual πŸ˜€ Keren kan!

Bagaimana caranya? Gampang Kok πŸ˜€

Membuat Project Baru

Untuk membuat project baru di NetBeans caranya cukup mudah, tingal lewat menu File -> New Project, maka tinggal kita pilih mau membuat project apa πŸ˜€

Saya anggap anda telah membuat sebuah project baru, atau sebenarnya project yang lama pun tidak mengapa πŸ˜€

Membuat Entity Class Otomatis

Untuk membuat class-class entity secara otomatis, caranya lewat menu File -> New File , atau Ctrl + N. Setelah itu akan muncul dialog, dan pada bagian Categories, pilih Persistence dan pada bagian File Types, pilih Entity Classes from Database :

Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8

Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8

Setelah itu klik tombol Next untuk melanjutkan, maka akan keluar dialog untuk Database Table, pilihlah koneksi yang akan digunakan pada bagian Database Connection, jika belum tersedia silahkan membuat dulu koneksinya :

Tambahkan tabel-tabel yang sekiranya akan dibuatkan sebuah entity class, misal saya tambahkan semua tabelnya :

Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8

Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8

Setelah itu klik tombol Next, dan sekarang saatnya di mapping dengan entity class. Ubahlah bagian Class Name dengan nama kelas yang kita inginkan :

Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8

Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8

dan jika terdapat warning “The project does not have persistence unit…“, maka klik tombol Create Persistence Unit :

Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8

Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8

Beri nama persistence unitnya lalu klik tombol Create untuk membuat persistence unit tersebut. Dan sekarang tidak ada warning lagi πŸ˜€ :

Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8

Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8

Setelah itu klik tombol Next dan sekarang kita harus melakukan konfigurasi relasi antar entitas. Ubah Assosiation Fetch dan Collection Type sesuai dengan yang kita inginkan, misal saya menggunakan fetch dan java.util.List :

Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8

Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8

Setelah itu klik tombol Finish, dan tunggu sampai selesai :

Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8

Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8

Sekarang semua Tabel sudah menjadi Entity Class,

Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8

Membuat Entity Class JPA dari Database Secara Otomatis Menggunakan NetBeans IDE 6.8

mudah bukan, bahkan kita tidak perlu coding sedikitpun πŸ˜€

“Jangan membeli rumah di lingkungan keputusasaan. Harapan masih ada. Jangan pergi menuju kegelapan. Ada cahaya.”, Jallaludi Rumi.