Populate JCombobox With Key and Value



Sebelumnya kita telah membahas cara menampilkan data dari database kedalam jCombobox,biasanya data yang ditampilkan untuk memilih salah satu item yang ada dalam Jcombobox tersebut kemdian akan dipergunakan dalam proses selanjutnya misalkan penyimpanan data,ubah data atau pun proses hapus.
Namun ada kalanya kita juga membutuhkan data dari jCombobox tersebut tidak hanya itemnya saja yang dtiampilkan tetapi key nya saja yang diambil, key bisa saja memuat item berupa primary key atau foreign key.  Misalnya pada studi kasus pengisian KRS dibutuhkan pemilihan data dosen yang ditampilkan dalam jCombobox, data yang ditampilkan berupa urutan nama dosen dan key yang disimpan adalah kode dosen, karena pada proses KRS ini kode dosen sebagai foreign key maka kita perlu mengetahui bagaimana caranya mengisi / populate jCombobox dengan nama dosen sebgai value dan kode dosen sebagi key.
Pada artikel ini akan dijelaskan cara Populate JCombobox With Key and Value menggunakan hashmap, yang pertama kita perlu pahami adalah apa yang dimaksud dengan hash map.

HashMap

HashMap merupakan sebuah class yang tersedia dalam bahasa pemrograman java sebagai kelas turunan dari class abstract map dan merupakan imlementasi dari class Mapp, berikut urutan class HashMap  Class Koneksi
Dengan menggunakan HashMap memungkinkan kita dapat menyimpan data value dan key secara sekaligus, ketika akan menggunakan HashMap kita perlu mengimpor header :
import java.util.HashMap;

setelah itu kita deklarasikan sebuah object baru dari class tersebut sebagai berikut :

HashMap map = new HashMap();


dekalrasi diatas berarti tipe data string untuk value dan tipe data integer untuk key. cara mengisi nilai pada object yang sudah dideklarasikan kita bisa menggunakan put misalnya :
map.put("key","value")

Implementasi pada JCombobox

Saatnya menjelaskan bagaimana implementasi HashMap pada JCombobox untuk aplikasi basis data artinya kita akan menampilkan data dari tabel dosen yang terdiri dari kolom kode_dosen dan nama_dosen, yang ingin kita tampilkan adalah nama_dosen sebagai value dan kode_dosen sebagi key. langkah pertama adalah membuat class DBKoneksi sebagai berikut :

Class DBKoneksi

package konfigurasi;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBKoneksi {
    public Connection koneksi;
    public Connection connect() {
        //koneksi ke driver mysql
        try {
            Class.forName("com.mysql.jdbc.Driver");
            System.out.println("Berhasil Koneksi Ke JDBC Driver MySQL");
        } catch (ClassNotFoundException ex) {
            System.out.println("Tidak Berhasil Koneksi Ke JDBC Driver MySQL");
        }
        //koneksi ke database
        try {
            String url = "jdbc:mysql://localhost:3306/datamhs";
            koneksi = DriverManager.getConnection(url, "root", "");
            System.out.println("Berhasil Koneksi Ke Database");
        } catch (SQLException e) {
            System.out.println("Tidak Berhasil Koneksi Ke Database");
        }
        return koneksi;
    }
    public static void main(String[] args) {
        java.sql.Connection conn = new DBKoneksi().connect();
    }
}

Langkah selanjutnya adalah membuat class DBQuery yang akan digunakan untuk menampilkan data dari tabel dosen, serta mendeklarasikan object HashMap coding class DBQuery, selanjutnya mengisi DosenItem kedalam object HashMap, berikut adalah coding dari DBQuery dan DosenItem:

Class DBQuery

package konfigurasi;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
 *
 * @author Jajang Nurjaman
 */
public class DBQuery {
     public HashMap< string integer=""> populateCombo() {
       HashMap< string integer=""> map = new HashMap< string integer="">();
        Connection con = new DBKoneksi().connect();
        Statement st;
        ResultSet rs;
        try {
            st = con.createStatement();
            rs = st.executeQuery("SELECT kode_dosen, nama_dosen FROM dosen");
            DosenItem dosenItem;
            while (rs.next()) {
                dosenItem = new DosenItem(rs.getInt(1), rs.getString(2));
                map.put(dosenItem.getNama_dosen(), dosenItem.getKode_dosen());
            }
        } catch (SQLException ex) {
            Logger.getLogger(DBKoneksi.class.getName()).log(Level.SEVERE, null, ex);
        }
        return map;
    }
}

Class DosenItem

package konfigurasi;
/**
 *
 * @author Jajang Nurjaman
 */
public class DosenItem {
    private int kode_dosen;
    private String nama_dosen;

    public DosenItem(int kode_dosen, String nama_dosen) {
        this.kode_dosen = kode_dosen;
        this.nama_dosen = nama_dosen;
    }

    public int getKode_dosen() {
        return kode_dosen;
    }

    public void setKode_dosen(int kode_dosen) {
        this.kode_dosen = kode_dosen;
    }

    public String getNama_dosen() {
        return nama_dosen;
    }

    public void setNama_dosen(String nama_dosen) {
        this.nama_dosen = nama_dosen;
    }
}

Selanjutnya adalah menambahkan prosedur BindCombo (Penamaan bebas tidak perlu sama). yang akan digunakan untuk memanggil prosedur yang telah kita buat pada class DBQuery pada Form Utama (formkrs).

public void BindCombo() {
        DBQuery dq = new DBQuery();
        HashMap< string integer=""> map = dq.populateCombo();
        for ( String s : map.keySet()) {
            jComboBox_dosen.addItem(s);
        }
    }

Panggil Fungsi BindCombo pada Constructor letakan dibawah initComponents();
public formkrs() {
        initComponents();
        BindCombo();
    }

Menambahkan event pada jCombobox (jComboBox_dosen) untuk menampilkan nama dan kode dosen pada jLabel.

private void jComboBox_dosenActionPerformed(java.awt.event.ActionEvent evt) {                                                
        DBQuery dq = new DBQuery();
        HashMap< string integer=""> map = dq.populateCombo();
        jLabel_nama.setText(jComboBox_dosen.getSelectedItem().toString());
        jLabel_kode.setText(map.get(jComboBox_dosen.getSelectedItem().toString()).toString());
    }    

Sekian artikel mengenai Populate JCombobox With Key and Value, moga bermanfaat.