Pada tutorial yang lalu, saya telah menulis tentang cara menarik data dari database untuk kemudian dimasukkan sebagai item pada combobox java. Pada tutorial ini kita akan membuat 2 buah combobox java yang saling terhubung isinya. Maksudnya seperti ini, misal kita mempunyai 2 buah combobox. Combobox pertama bernama fakultas sedangkan combobox kedua bernama jurusan. Ketika item pada combobox fakultas yang dipilih adalah fakultas teknik maka combobox jurusan akan berisi item jurusan yang ada di fakultas teknik. Begitu pula jika yang dipilih adalah fakultas mipa dan ekonomi, combobox jurusan akan menyesuaikan.
Tampilan akhir aplikasi combobox java adalah seperti ini:
gambar aplikasi combobox java yang saling terhubung
Tertarik? 😀
Kalau tertarik mari lanjutkan..
Inti dari aplikasi combobox ini adalah menggunakan ActionListener yang dipasang pada combobox fakultas. Pada ActionListener inilah nantinya kita akan membuat kode yang sedemikian rupa sehingga item pada combobox jurusan menyesuaikan dengan pilihan pada combobox fakultas.
Potongan kodenya adalah sebagai berikut
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
..... //tutorial combobox java private void initComboBox(){ FakultasService fakultasService=ComboBoxTerhubung.getFakultasService(); List fakultases=fakultasService.getAllFakultas(); for(Fakultas fak:fakultases){ jComboBoxFakultas.addItem(fak); } jComboBoxFakultas.addActionListener(new ComboBoxListener()); } ..... private class ComboBoxListener implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { Fakultas fakultas=(Fakultas) jComboBoxFakultas.getSelectedItem(); JurusanService jurusanService=Main.getJurusanService(); List jurusans=jurusanService.getJurusanByFakultas(fakultas.getIdFakultas()); jComboBoxJurusan.removeAllItems(); for(Jurusan jurusan:jurusans){ jComboBoxJurusan.addItem(jurusan); } } } ..... |
Sudah mendapatkan gambaran cara kerjanya?. Kalau belum mari kita lanjutkan lagi dengan penjelasan yang lebih detail dan kode-kode yang lengkapnya. Pada tutorial combobox java ini saya menggunakan Hibernate dan juga plain JDBC dengan maksud biar yang belum tahu Hibernate juga bisa merasakan manfaat tutorial ini.
Langkah#1 Membuat Project combobox java dan Menambahkan Library
Buat Project dengan nama ComboBoxTerhubung serta buat package-package sesuai dengan gambar berikut ini
gambar aplikasi combobox java
Pada node Libraries tambahkan library Hibernate JPA dan MySql JDBC Driver.
Langkah#2 Membuat Data Source Hibernate
Buatlah file konfigurasi untuk Hibernate pada package default dan beri nama file konfigurasi tersebut hibernate.cfg.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/comboboxterhubung?zeroDateTimeBehavior=convertToNull</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">root</property> <mapping class="comboboxterhubung.entity.Fakultas"/> <mapping class="comboboxterhubung.entity.Jurusan"/> </session-factory> </hibernate-configuration> |
Setelah konfigurasi Hibernate untuk aplikasi combobox java kita buat, selanjutnya membuat Class yang digunakan untuk mendapatkan SessionFactory yang berguna untuk mendapatkan Session. Objek Session inilah yang berperan penting dalam proses query data pada Hibernate.
Pada package comboboxterhubung.util buat sebuah Class dengan nama HibernateUtil. Adapun isinya adalah sebagai berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
package comboboxterhubung.util; import org.hibernate.cfg.AnnotationConfiguration; import org.hibernate.SessionFactory; public class HibernateUtil { private static final SessionFactory sessionFactory; static { try { sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); } catch (Throwable ex) { System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory() { return sessionFactory; } } //tutorial combobox java |
Kalau sudah selesai maka saatnya untuk membuat Class entity/domain model yaitu Class yang merepresentasikan tabel yang ada pada database untuk aplikasi combobox java ini. Buat dua buah class dengan nama Fakultas dan Jurusan pada package comboboxterhubung.entity
Class Fakultas
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
package comboboxterhubung.entity; import java.util.ArrayList; import java.util.List; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Table; @Entity @Table(name="fakultas") public class Fakultas { @Id @Column(name="id_fakultas") private String idFakultas; @Column(name="nama_fakultas") private String namaFakultas; @OneToMany(mappedBy = "fakultas") private List<Jurusan> jurusans=new ArrayList<Jurusan>(); public String getIdFakultas() { return idFakultas; } public void setIdFakultas(String idFakultas) { this.idFakultas = idFakultas; } public String getNamaFakultas() { return namaFakultas; } public void setNamaFakultas(String namaFakultas) { this.namaFakultas = namaFakultas; } public List<Jurusan> getJurusans() { return jurusans; } public void setJurusans(List<Jurusan> jurusans) { this.jurusans = jurusans; } @Override public String toString() { return namaFakultas; } } //tutorial combobox java |
Class Jurusan
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
package comboboxterhubung.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; @Entity @Table(name="jurusan") public class Jurusan { @Id @Column(name="id_jurusan") private String idJurusan; @Column(name="nama_jurusan") private String namaJurusan; @JoinColumn(name="id_fakultas") @ManyToOne private Fakultas fakultas; public String getIdJurusan() { return idJurusan; } public void setIdJurusan(String idJurusan) { this.idJurusan = idJurusan; } public String getNamaJurusan() { return namaJurusan; } public void setNamaJurusan(String namaJurusan) { this.namaJurusan = namaJurusan; } public Fakultas getFakultas() { return fakultas; } public void setFakultas(Fakultas fakultas) { this.fakultas = fakultas; } @Override public String toString() { return namaJurusan; } } //tutorial combobox java |
Langkah#3 Membuat Service
Service pada aplikasi ini digunakan untuk mendapatkan data dari database. Desain yang baik adalah desain yang memiliki layer/menerapkan layering. Layering menjadikan aplikasi mudah dimodifikasi karena antar objek yang satu dengan objek yang lain tidak saling terikat. Tanpa layering kamu akan langsung menulis kode untuk mengakses database pada UI dengan menggunakan Jdbc misalnya. Suatu saat aplikasi ingin diubah menjadi menggunakah Hibernate atau JPA atau yang lain… waah bisa repot nantinya. Nanti kamu akan melihat bahwa dengan menggunakan layering ini kita bisa menggunakan Hibernate dengan Jdbc hanya dengan mengganti 1 kata 😀 keren kan
Pada package comboboxterhubung.service buat interface dengan nama FakultasService. Interface inilah yang membuat layering kita menjadi fleksibel untuk diubah-ubah implementasinya, dari implementasi Hiberntae ke implementasi Jdbc dan sebaliknya. Ketikkan kode berikut:
1 2 3 4 5 6 7 8 9 10 |
package comboboxterhubung.service; import comboboxterhubung.entity.Fakultas; import java.util.List; public interface FakultasService { public List<Fakultas> getAllFakultas(); } //tutorial combobox java |
Sengaja saya buat simpel dengan hanya ada 1 method untuk mengambil data seluruh fakultas yang terdapat pada sistem. Selanjutnya kita buat implementasinya. Seperti sudah saya katakan diatas kita akan menggunakan 2 implementasi. Implementasi pertama adalah menggunakan Hibernate. Kodenya adalah seperti berikut:
Class FakultasServiceImplHibernate
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
package comboboxterhubung.service; import comboboxterhubung.entity.Fakultas; import comboboxterhubung.util.HibernateUtil; import java.util.List; import org.hibernate.Session; public class FakultasServiceImplHibernate implements FakultasService { @Override public List<Fakultas> getAllFakultas() { Session session=HibernateUtil.getSessionFactory().openSession(); return session.createQuery("select f from Fakultas f").list(); } } //tutorial combobox java |
Untuk implementasi menggunakan Jdbc menggunakan kode seperti ini:
Class FakultasServiceImplJdbc
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
package comboboxterhubung.service; import comboboxterhubung.entity.Fakultas; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; public class FakultasServiceImplJdbc implements FakultasService { public Connection connection; public PreparedStatement preparedStatement; List<Fakultas> fakultases=new ArrayList<Fakultas>(); public FakultasServiceImplJdbc(Connection connection){ this.connection=connection; } @Override public List<Fakultas> getAllFakultas() { try { preparedStatement=connection.prepareStatement("SELECT * FROM fakultas"); ResultSet rs=preparedStatement.executeQuery(); while(rs.next()){ Fakultas fakultas=new Fakultas(); fakultas.setIdFakultas(rs.getString("id_fakultas")); fakultas.setNamaFakultas(rs.getString("nama_fakultas")); fakultases.add(fakultas); } return fakultases; } catch (SQLException ex) { Logger.getLogger(FakultasServiceImplJdbc.class.getName()).log(Level.SEVERE, null, ex); } return null; } } //tutorial combobox java |
Service untuk Fakultas sudah selesai dibuat, berarti selanjutnya adalah membuat Service untuk Jurusan. Sama seperti dalam pembuatan FakultasService diatas, kita membuat terlebih dahulu sebuah interface untuk kemudian dibuat implementasinya dalam Hibernate dan Jdbc. Langsung saja ketik kodenya seperti ini
interface JurusanService
1 2 3 4 5 6 7 8 9 10 |
package comboboxterhubung.service; import comboboxterhubung.entity.Jurusan; import java.util.List; public interface JurusanService { public List<Jurusan> getJurusanByFakultas(String kodeFakultas); } //tutorial combobox java |
Impelementasi menggunakan Hibernate
class JurusanServiceImplHibernate
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package comboboxterhubung.service; import comboboxterhubung.entity.Jurusan; import comboboxterhubung.util.HibernateUtil; import java.util.List; import org.hibernate.Session; public class JurusanServiceImplHibernate implements JurusanService { @Override public List<Jurusan> getJurusanByFakultas(String kodeFakultas) { Session session=HibernateUtil.getSessionFactory().openSession(); return session.createQuery("select j from Jurusan j where j.fakultas.idFakultas=:kodeFakultas") .setParameter("kodeFakultas", kodeFakultas).list(); } } //tutorial combobox java |
Impementasi menggunakan Jdbc
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
package comboboxterhubung.service; import comboboxterhubung.entity.Jurusan; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; public class JurusanServiceImplJdbc implements JurusanService { public Connection connection; public PreparedStatement preparedStatement; public JurusanServiceImplJdbc(Connection connection){ this.connection=connection; } @Override public List<Jurusan> getJurusanByFakultas(String kodeFakultas) { try { List<Jurusan> jurusans=new ArrayList<Jurusan>(); preparedStatement=connection.prepareStatement("SELECT * FROM jurusan where id_fakultas=?"); preparedStatement.setString(1, kodeFakultas); ResultSet rs=preparedStatement.executeQuery(); while(rs.next()){ Jurusan jurusan=new Jurusan(); jurusan.setIdJurusan(rs.getString("id_jurusan")); jurusan.setNamaJurusan(rs.getString("nama_jurusan")); jurusans.add(jurusan); } return jurusans; } catch (SQLException ex) { Logger.getLogger(JurusanServiceImplJdbc.class.getName()).log(Level.SEVERE, null, ex); } return null; } } //tutorial combobox java |
Sampai disini maka telah selesai untuk bagian Service pada aplikasi combobox java ini. Hampir seluruh bagian telah siap tinggal membuat UI dan memodifiksi Class Main (Class yang terpadat pada package comboboxterhubung).
langkah#4 Membuat UI dan Class Main
Untuk bentuk tampilannya sesuaikan dengan selera kamu. Kalau punya saya seperti ini:
beri nama MainFrame dan taruh pada package comboboxterhubung.ui
Sebelum menambahkan method, kita modifikasi terlebih dahulu Class Main menjadi seperti ini:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
package comboboxterhubung; import com.mysql.jdbc.jdbc2.optional.MysqlDataSource; import comboboxterhubung.service.FakultasService; import comboboxterhubung.service.FakultasServiceImplHibernate; import comboboxterhubung.service.FakultasServiceImplJdbc; import comboboxterhubung.service.JurusanService; import comboboxterhubung.service.JurusanServiceImplHibernate; import comboboxterhubung.service.JurusanServiceImplJdbc; import comboboxterhubung.ui.MainFrame; import java.sql.SQLException; public class Main { public static FakultasService fakultasService; public static JurusanService jurusanService; private static boolean JdbcMode= Boolean.TRUE; public static FakultasService getFakultasService(){ return fakultasService; } public static JurusanService getJurusanService(){ return jurusanService; } public static void main(String[] args) throws SQLException { if(!JdbcMode){ fakultasService=new FakultasServiceImplHibernate(); jurusanService=new JurusanServiceImplHibernate(); } else{ MysqlDataSource dataSource=new MysqlDataSource(); dataSource.setUser("root"); dataSource.setPassword("root"); dataSource.setDatabaseName("comboboxterhubung"); dataSource.setServerName("localhost"); fakultasService=new FakultasServiceImplJdbc(dataSource.getConnection()); jurusanService=new JurusanServiceImplJdbc(dataSource.getConnection()); } new MainFrame().setVisible(true); } } //tutorial combobox java |
Lihat pada bagian ini
1 |
private static boolean JdbcMode= Boolean.TRUE; |
Jika property tersebut bernilai True maka yang akan digunakan adalah implementasi Jdbc. Sedangkan jika nilainya di set menjadi False maka yang digunakan adalah implementasi Hibernate.. praktis dan keren kan 😀
Setelah beres maka saatnya untuk menambahkan beberapa method pada MainFrame. Buta sebuah private class dengan nama ComboBoxListener didalam class MainFrame dan ketikkan kode berikut
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
........ ........ ........ private class ComboBoxListener implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { Fakultas fakultas=(Fakultas) jComboBoxFakultas.getSelectedItem(); JurusanService jurusanService=Main.getJurusanService(); List<Jurusan> jurusans=jurusanService.getJurusanByFakultas(fakultas.getIdFakultas()); jComboBoxJurusan.removeAllItems(); for(Jurusan jurusan:jurusans){ jComboBoxJurusan.addItem(jurusan); } } } private javax.swing.JComboBox jComboBoxFakultas; private javax.swing.JComboBox jComboBoxJurusan; ...... ...... //tutorial combobox java |
Buat sebuah private method untuk mengisi data combobox fakultas sekaligus menambahkan ActionListener ke combobox fakultas
1 2 3 4 5 6 7 8 9 10 11 |
private void initComboBox(){ FakultasService fakultasService=Main.getFakultasService(); //new FakultasServiceImplHibernate(); List<Fakultas> fakultases=fakultasService.getAllFakultas(); for(Fakultas fak:fakultases){ jComboBoxFakultas.addItem(fak); } jComboBoxFakultas.addActionListener(new ComboBoxListener()); } //tutorial combobox java |
Terkahir memodifikasi constructor menjadi seperti ini
1 2 3 4 5 6 |
public MainFrame() { initComponents(); initComboBox(); } //tutorial combobox java |
Selesai 😀
Sekarang jalankan Class Main (jangan Class MainFrame). Seharusnya aplikasi combobox java yang terhubung berjalan sebagaimana mestinya.
Jika masih ada yang kebingungan memahami tutorial combobox java ini silahkan berdiskusi pada fitur koemntar yang telah disediakan dibawah ini 🙂
Happy Coding 😀