Hijrah untuk Hidup


Hijrah, sepertinya udah gak asing lagi dengan kata itu.

Banyak sekali makna dibalik kata hijrah, tergantung dilihat dari sudut pandang apa B-)

Hari ini saya akan memulai usaha StripBandunk di Cirebon, yg artinya harus pula saya siap tinggal di sana. Ini adalah salah satu hijrah yg saya lakukan, mencoba memulai berdagang, berdagang untuk hidup yg lebih baik.

Hijrah adalah sesuatu yg wajib kita lakukan, baik itu hijrah dari keadaan buruk ke baik, hijrah dari jomblo jadi nikah, hijrah dari karyawan jd berdagang, dll.

Sudahkah teman2 hijrah? Saya harap teman2 sudah hijrah menjadi lebih baik, amin.

image

Diatas adalah gambar rumah yg akan dijadikan kantor pertama stripbandunk. Kantor yg saya dan teman2 usahakan dgn penuh perjuangan, walaupun masih ala kadarnya.

Memang untuk memulai usaha berdagang bukanlah hal yg mudah, banyak sekali pengorbanannya, apalagi saya dan teman2 memulainya hanya dengan modal dengkul, tanpa bantuan siapapun bahkan orang tua, hanya doa dan Allah yg membantu (lebay mode on)

image

Ruang miting stripbandunk yg seadanya.

So ayo kita sama2 hijrah untuk hidup lebih baik, dan untuk indonesia yg lebih baik.

Posted from WordPress for Android

Iklan

MengasingkanΒ Diri…


Mengasingkan diri untuk merenungi apa yang sudah dilakukan selama 22 tahun ini…

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 <–

Masalah Saya Dengan Master-Detail di Bahasa Pemrograman Java


Posting baru artinya ada masalah baru πŸ˜€ , Kali ini berhubungan saya pemrograman Java, khususnya teknologi Swing (Salah satu teknologi Java GUI). Masalahnya sih sederhana aja. Yang biasa menggunakan bahasa Visual seperti Delphi, VB dan bahasa visual lainnya, mungkin akan bilang mudah untuk membuat Master Detail πŸ˜€ , sedangkan tidak dengan Java πŸ˜€

So jadi intinya masalah yang saya hadapi adalah, gimana cara membuat sebuah master-detail di Java? Ada yang tau?

…..

*Berpikir Sejenak…

AHA!!!!!!!!!!! saya dapat ide πŸ˜€ , sepertinya kalo saya otak-atik di JTable akan sulit, jadi gimana kalo kita bermain dengan TableModel saya, sepertinya akan lebih mudah πŸ˜€ Anggap saja misal ada entitas Mahasiswa , dan setiap mahasiswa boleh mengambil MataKuliah lebih dari satu, tentunya πŸ˜€ Jadi disini, kita anggap Master-nya adalah Mahasiswa dan Detail-nya adalah MataKuliah. Kalo dibuat kelas entitasnya bisa seperti ini :

package khannedy.blogging.masterdetail.entity;

import java.io.Serializable;

public class MataKuliah implements Serializable {

 private String kode;
 private String nama;

 public String getKode() {
 return kode;
 }

 public void setKode(String kode) {
 this.kode = kode;
 }

 public String getNama() {
 return nama;
 }

 public void setNama(String nama) {
 this.nama = nama;
 }
}
package khannedy.blogging.masterdetail.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Mahasiswa implements Serializable {

 public static enum JenisKelamin {
 LakiLaki, Perempuan
 }

 private String nim;
 private String namaDepan;
 private String namaBelakang;
 private Date tanggalLahir;
 private JenisKelamin jenisKelamin;
 private List<matakuliah> mataKuliahs = new ArrayList<matakuliah>();

 public boolean add(MataKuliah e) {
 return mataKuliahs.add(e);
 }

 public List getMataKuliahs() {
 return mataKuliahs;
 }

 public JenisKelamin getJenisKelamin() {
 return jenisKelamin;
 }

 public void setJenisKelamin(JenisKelamin jenisKelamin) {
 this.jenisKelamin = jenisKelamin;
 }

 public String getNamaBelakang() {
 return namaBelakang;
 }

 public void setNamaBelakang(String namaBelakang) {
 this.namaBelakang = namaBelakang;
 }

 public String getNamaDepan() {
 return namaDepan;
 }

 public void setNamaDepan(String namaDepan) {
 this.namaDepan = namaDepan;
 }

 public String getNim() {
 return nim;
 }

 public void setNim(String nim) {
 this.nim = nim;
 }

 public Date getTanggalLahir() {
 return tanggalLahir;
 }

 public void setTanggalLahir(Date tanggalLahir) {
 this.tanggalLahir = tanggalLahir;
 }
}

Sederhana saja, jangan terlalu kompleks, yang penting mengerti cara membuat Master-Detail di Java Swing. Dari kelas diatas, kita bisa liat kalo Mahasiswa dapat mengambil MataKuliah lebih dari satu, oleh karena itu, saya menggunakan List, agar MataKuliah dapat ditambah. Sekarang saatnya kita membuat TableModel nya, karena kita menggunakan 2 kelas entitas, yaitu kelas Mahasiswa dan kelas MataKuliah, jadi kita membaut 2 TableModel, yaitu TableModelMahasiswa dan TableModelMataKuliah, fungsinya tentunya sesuai namanya.

package khannedy.blogging.masterdetail.model;

import java.util.List;
import javax.swing.table.AbstractTableModel;
import khannedy.blogging.masterdetail.entity.Mahasiswa;

public class TableModelMahasiswa extends AbstractTableModel {

 private List<mahasiswa> list;

 public TableModelMahasiswa(List list) {
 this.list = list;
 }

 public List getList() {
 return list;
 }

 public int getRowCount() {
 return list.size();
 }

 public int getColumnCount() {
 return 5;
 }

 @Override
 public String getColumnName(int column) {
 switch (column) {
 case 0:
 return "Nim";
 case 1:
 return "Nama Depan";
 case 2:
 return "Nama Belakang";
 case 3:
 return "Tanggal Lahir";
 case 4:
 return "Jenis Kelamin";
 default:
 return null;
 }
 }

 public Object getValueAt(int rowIndex, int columnIndex) {
 switch (columnIndex) {
 case 0:
 return list.get(rowIndex).getNim();
 case 1:
 return list.get(rowIndex).getNamaDepan();
 case 2:
 return list.get(rowIndex).getNamaBelakang();
 case 3:
 return list.get(rowIndex).getTanggalLahir();
 case 4:
 return list.get(rowIndex).getJenisKelamin();
 default:
 return null;
 }
 }
}

Untuk TableModelMahasiswa, kita menggunakan konstruktor yang harus langsung di inisialisasikan isi datanya public TableModelMahasiswa(List<Mahasiswa> list) , ini kita anggap karena memang Mahasiswa adalah Master, jadi datanya kita anggap tidak akan berubah-rubah, berbeda dengan data MataKuliah yang menjadi Detail-nya.

package khannedy.blogging.masterdetail.model;

import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
import khannedy.blogging.masterdetail.entity.MataKuliah;

public class TableModelMataKuliah extends AbstractTableModel {

 private List<matakuliah> list = new ArrayList<matakuliah>();

 public void setList(List list) {
 this.list = list;
 fireTableDataChanged();
 }

 public int getRowCount() {
 return list.size();
 }

 public int getColumnCount() {
 return 2;
 }

 @Override
 public String getColumnName(int column) {
 switch (column) {
 case 0:
 return "Kode";
 case 1:
 return "Nama";
 default:
 return null;
 }
 }

 public Object getValueAt(int rowIndex, int columnIndex) {
 switch (columnIndex) {
 case 0:
 return list.get(rowIndex).getKode();
 case 1:
 return list.get(rowIndex).getNama();
 default:
 return null;
 }
 }
}

Untuk TableModelMataKuliah, cara mengubah datanya adalah menggunakan metode public void setList(List<MataKuliah> list) tidak menggunakan konstruktor, hal ini seperti yang dituliskan diatas, bahwa MataKuliah adalah Detail-nya, jadi akan sering sekali berubah, sehingga tidak disarankan datanya di set di konstruktor, karena jika di konstruktor, maka saat ada Detail baru yang akan ditampilkan, maka TableModelMataKuliah yang baru akan dibuat, dan semakin banyak TableModelMataKuliah yang dibuat, maka memori akan membengkak. Berbeda jika menggunakan kode diatas, memori tidak akan bertambah karena kita tidak perlu membuat TableModelMataKuliah jika akan menampilkan Detail-MataKuliah yang baru.

Sekarang tinggal tahap penerapan, anggap saja saya sudah membuat design tampilan aplikasinya, lalu saya membuat 2 JTable, pertama bernama tabelMahasiswa untuk menampilkan data Mahasiswa dan kedua tabelMataKuliah untuk menampilkan data MataKuliah. Sekarang tinggal set Model untuk tabelMahasiswa menjadi TableModelMahasiswa dan set Model untuk tabelMataKuliah menjadi TableModelMataKuliah :

modelMahasiswa = new TableModelMahasiswa(service.getAllMahasiswa(100));
modelMataKuliah = new TableModelMataKuliah();

tabelMahasiswa.setModel(modelMahasiswa);
tabelMataKuliah.setModel(modelMataKuliah);

Setelah itu kita beri aksi, saat pengguna menseleksi satu buat baris di tabelMahasiswa, maka tabelMataKuliah akan menampilkan data MataKuliah yang diambil oleh Mahasiswa yang terseleksi di tabelMahasiswa :

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

 public void valueChanged(ListSelectionEvent e) {
  int selected = tabelMahasiswa.getSelectedRow();
   if (selected != -1) {
     Mahasiswa mahasiswa = modelMahasiswa.getList().get(selected);
     List<matakuliah> list = mahasiswa.getMataKuliahs();
     modelMataKuliah.setList(list);
   }
 }
});

Selesai, sekarang tinggal jalankan aplikasinya. Dibawah ini adalah tampilan dari aplikasinya :

Master-Detail

Master-Detail Java Programming

Silahkan download sourcecode lengkapnya disini :

http://bit.ly/9N5Jgb

Resolusi tahun 2010


biasanya rame posting blog awal tahun adalah, ucapan selamat tahun baru dan juga tentang resolusi yang mau dicapai πŸ˜€

kalo resolusi saya?

“LULUS KULIAH”

itu cukup πŸ˜€

Download Source Code UsuLibrary


Ini adalah hasil dari Artikel sebelumnya :

Decompile File Jar / Class ke Java Menggunakan Java Decompiler

dan ini adalah hasil dari dekompilasi Usulibrary yang digunakan dalam project eBookLibrary, eMovieRental, ePhoneBook dan MinimumSpanningTree. silahkan download disini :

http://swing-usu.googlecode.com/files/UsuLibrary.src.zip

enjoy πŸ˜€

[Java Source Code] Convert File to Bytes


/*
 *  Copyright 2009 Eko Kurniawan Khannedy
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *  under the License.
 */
package echo.khannedy.sourcecode;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

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

    public static void main(String[] echo) throws FileNotFoundException, IOException {

        // load file
        File file = new File("build.xml");

        // create input stream
        FileInputStream inputStream = new FileInputStream(file);

        // create bytearrayoutputstream
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

        // process read and write data
        byte[] data = new byte[1024];
        int length = 0;
        while ((length = inputStream.read(data)) > 0) {
            outputStream.write(data, 0, length);
        }
        outputStream.flush();

        // result of bytes
        byte[] result = outputStream.toByteArray();

        // close
        inputStream.close();
        outputStream.close();
    }
}

enkripsi data kolom di hibernate menggunakan jasypt


kalo kita pake JDBC, iBatis gampang sekali jika kita mau membaut sebuah kolom yang hasil save ke databasenya itu di enkripsi, tinggal kasih funsi PASSWORD(value) di perintah INSERT nya aja (itu kalo di MySQL. Tapi berbeda dengan di Hibernate, kalo kita akan mengenkripsi hasil data di database agak triki untuk melakukannya.

cara pertama mungkin kita enkripsi di class Entity yang kita buat dan cara yang kedua adalah kita membaut UserType sendiri. Dan sekarang gw mo kasih tutorial tentang cara enkripsi data kolom menggunakan UserType. UserType itu adalah tipe kolom yang bisa kita buat jika memang hibernate tidak memiliki kemampuan yang kita inginkan, di contoh ini adalah enkripsi data πŸ˜€ Baca lebih lanjut