The Importance of Sharing


Tulisan ini merupakan lanjutan dari artikel saya sebelumnya, yaitu Menampilkan Gambar dalam JPanel. Pada artikel tersebut saya hanya menampilkan file gambar yang ada di komputer ke dalam JPanel. Nah, pada tulisan kali ini saya ingin mengembangkannya, dimana gambar tersebut saya simpan ke dalam database. Database yang saya gunakan adalah MySQL, dan editornya adalah NetBeans 6.9.1 dan aplikasi yang saya buat berbasis desktop atau menggunakan Swing. Dalam pembuatan aplikasi ini, saya juga menerapakan DAO pattern yang sudah sedikit saya bahas sebelumnya disini.

Langsung saja saya mulai, pertama buat dulu databasenya, nama database yang saya gunakan adalah Coba dan untuk nama tabelnya adalah Karyawan, jadi scriptnya sebagai berikut.

CREATE DATABASE Coba;

USE Coba;

CREATE TABLE Karyawan(
id int PRIMARY KEY AUTO_INCREMENT,
nama VARCHAR(50) NOT NULL,
alamat VARCHAR(100) NOT NULL,
jenisKelamin VARCHAR(15) NOT NULL,
tglLahir DATE,
foto BLOB);

Tipe data yang digunakan untuk menyimpan gambar adalah BLOB atau Binary Large Object. Kemudian kita buka netbeans, lalu buat project baru dengan nama bebas terserah anda. Lalu buatlah sebuah JPanel yang mana nantinya akan kita gunakan sebagai tempat untuk menampilkan gambar tersebut. Jangan lupa untuk menambahkan library mysql ke dalam project anda.

 Kemudian pada klik tab source, lalu ketikkan kode berikut.

/**
 * PanelGambar.java
 *
 * Created on May 8, 2012, 3:42:41 PM
 */

package arya.form;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author arya
 */
public class PanelGambar extends javax.swing.JPanel {

    /** Creates new form PanelGambar */
    private Image image;
    public PanelGambar() {
        initComponents();
    }

    public void setImage(Image image){
        this.image = image;
        MediaTracker mediaTracker = new MediaTracker(this);
        mediaTracker.addImage(image, 0);
        try {
            mediaTracker.waitForID(0);
        } catch (InterruptedException ex) {
            Logger.getLogger(PanelGambar.class.getName()).log(Level.SEVERE, null, ex);
        }
        initComponents();
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(image, 0, 0,getWidth(),getHeight(), this);
    }
}

Sourcecode tersebut merupakan source code yang terdapat pada artikel saya sebelumnya, hanya saja saya melakukan sedikit perubahan, supaya bisa sedikit dinamis. Dimana perubahan tersebut adalah saya menggunakan method setImage untuk merubah gambar pada JPanel. Jika sudah selesai, untuk selanjutnya buatlah desain form seperti gambar dibawah ini.


Dibawah ini merupakan keterangan untuk masing – masing nomor diatas.

No Jenis Nama Fungsi
1 JTextField txtNama Menampung nama karyawan
2 JTextField txtAlamat Menampung alamat karyawan
3 JRadioButton rdPria Mewakili jenis kelamin pria
4 JRadioButton rdPerempuan Mewakili jenis kelamin wanita
ButtonGroup buttonGroup1 Menampung kedua JRadioButton
5 JDateChooser jdcLahir Menampung tanggal lahir karyawan
6 JTextField txtFoto Menampung nama / path gambar
7 JButton btnCari Mencari file gambar di komputer
8 PanelGambar panelGambar1 Menampilkan gambar yang telah dipilih
9 JButton btnSimpan Menyimpan data karyawan baru
10 JButton btnUbah Menyimpan perubahan data karyawan
11 JButton btnHapus Menghapus data karyawan
12 JButton btnBatal Menghapus isi komponen
13 JTable JTable1 Menampilkan semua data karyawan
JScrollPane jScrollPane1 Menampung JTable
14 JPanel jPanel1 Menampung komponen isian data karyawan

Untuk menampung pilihan tanggal lahir saya menggunakan control tambahan yaitu JDateChooser, control tersebut bisa dilihat disini. Nah, jika sudah selesai mendesain form, mari kita lanjutlkan dengan membuat entity. Mengapa demikian ? Karena saya menggunakan DAO pattern dalam pembuatan aplikasi ini. DAO pattern sudah saya bahas sekilas disini, namun hanya sekilas saja. Jika ingin lebih mendetail bisa melihat pada berbagai artikel atau buku yang ada. Dibawah ini adalah source code entity karyawan.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package arya.entity;

import java.util.Date;

/**
 *
 * @author arya
 */
public class Karyawan{
    private Long id;
    private String nama;
    private String alamat;
    private Date tglLahir;
    private String jenisKelamin;
    private byte[] foto;

    public byte[] getFoto() {
        return foto;
    }

    public void setFoto(byte[] foto) {
        this.foto = foto;
    }
    public String getAlamat() {
        return alamat;
    }

    public void setAlamat(String alamat) {
        this.alamat = alamat;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getJenisKelamin() {
        return jenisKelamin;
    }

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

    public String getNama() {
        return nama;
    }

    public void setNama(String nama) {
        this.nama = nama;
    }

    public Date getTglLahir() {
        return tglLahir;
    }

    public void setTglLahir(Date tglLahir) {
        this.tglLahir = tglLahir;
    }

}

Entity tersebut berfungsi untuk mengenkapsulasi data karyawan baik dari database untuk ditampilkan ke aplikasi atau dari aplikasi untuk disimpan ke database. Entity merupakan class yang biasanya mendeskripsikan tabel yang ada didalam database. Jika diperhatikan dengan seksama, field – field yang terdapat dalam class Karyawan tersebut, sama dengan kolom – kolom yang terdapat dalam tabel karyawan, hanya saja tipe datanya yang sedikit berbeda. Hal ini sangat membantu bila ada programmer lain yang ingin memaintenance aplikasi kita. Karena dengan adanya entity, programmer lain tahu apa saja tabel, kolom dan sebagainya yang tersimpan didalam database tanpa harus membuka database. Untuk menampung data foto karyawan supaya bisa disimpan ke dalam database kita menggunakan byte sebagai tipe datanya namun berupa array 1 dimensi.

Karena saya menggunakan DAO pattern, maka untuk selanjutnya kita membuat interface, yang isinya merupakan pendefinisian dari method – method untuk memanipulasi database.

package arya.dao;

import arya.entity.Karyawan;
import java.util.List;

/**
 *
 * @author arya
 */
public interface KaryawanDao {

    public void save(Karyawan karyawan);
    public void update(Karyawan karyawan);
    public void delete(Karyawan karyawan);
    public List<Karyawan> getAll();

}

Selanjutnya kita buat implementasi dari interface tersebut seperti ini.

package arya.dao.impl;

import arya.dao.KaryawanDao;
import arya.entity.Karyawan;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Date;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author arya
 */
public class KaryawanDaoImpl implements KaryawanDao{
private Connection connection;

    public KaryawanDaoImpl(Connection connection){
        this.connection = connection;
    }
    public void save(Karyawan karyawan) {
        String SQL = "INSERT INTO Karyawan(nama,alamat,jenisKelamin,tglLahir,foto) VALUES(?,?,?,?,?)";
        try {
            PreparedStatement statement = connection.prepareStatement(SQL);
            statement.setString(1, karyawan.getNama());
            statement.setString(2, karyawan.getAlamat());
            statement.setString(3, karyawan.getJenisKelamin());
            statement.setDate(4, new Date( karyawan.getTglLahir().getTime()));
            statement.setBytes(5, karyawan.getFoto());
            statement.executeUpdate();
        } catch(SQLException ex) {
            Logger.getLogger(KaryawanDaoImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void update(Karyawan karyawan) {
        String SQL = "UPDATE Karyawan set nama=?, alamat=?,jenisKelamin=?,tglLahir=?,foto=? WHERE id=?";
        try {
            PreparedStatement statement = connection.prepareStatement(SQL);
            statement.setString(1, karyawan.getNama());
            statement.setString(2, karyawan.getAlamat());
            statement.setString(3, karyawan.getJenisKelamin());
            statement.setDate(4, new Date(karyawan.getTglLahir().getTime()));
            statement.setBytes(5, karyawan.getFoto());
            statement.setLong(6, karyawan.getId());
            statement.executeUpdate();
        } catch (SQLException ex) {
            Logger.getLogger(KaryawanDaoImpl.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    public void delete(Karyawan karyawan) {
        String SQL="DELETE FROM Karyawan WHERE id=?";
        try {
            PreparedStatement statement = connection.prepareStatement(SQL);
            statement.setLong(1, karyawan.getId());
            statement.executeUpdate();
        } catch (SQLException ex) {
            Logger.getLogger(KaryawanDaoImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public List<Karyawan> getAll() {
        String SQL = "SELECT id,nama,alamat,jenisKelamin,tglLahir,foto FROM Karyawan";
        List <Karyawan> list = new ArrayList();
        Karyawan karyawan = null;
        try {
            PreparedStatement statement = connection.prepareStatement(SQL);
            ResultSet rs = statement.executeQuery();

            while (rs.next()){
                karyawan = new Karyawan();
                karyawan.setId(rs.getLong(1));
                karyawan.setNama(rs.getString(2));
                karyawan.setAlamat(rs.getString(3));
                karyawan.setJenisKelamin(rs.getString(4));
                karyawan.setTglLahir(rs.getDate(5));
                karyawan.setFoto(rs.getBytes(6));
                list.add(karyawan);
                karyawan=null;
            }
        } catch (SQLException ex) {
            Logger.getLogger(KaryawanDaoImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
        return list;
    }

}

Anda bisa lihat kode DAO tersebut hanya berisi kode untuk memanipulasi database. Kode tersebut tidak mengandung business logic aplikasi. Jadi aplikasi nantinya cukup memanggil method – method yang sudah disediakan oleh DAO tersebut. Untuk selanjutnya kita buat kelas, semacam utility class, yang isinya koneksi ke database dan objek – objek DAO tersebut.

package arya.koneksi;

import arya.dao.KaryawanDao;
import arya.dao.LaporanKaryawanDao;
import arya.dao.impl.KaryawanDaoImpl;
import arya.dao.impl.LaporanKaryawanDaoImpl;
import com.mysql.jdbc.Driver;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Koneksi {
    private static Connection connection;
    private static KaryawanDao karyawanDao;
    private Koneksi(){

    }

    private static Connection getConnection() {
        if (connection==null){
            try {
                DriverManager.registerDriver(new Driver());
                connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/Coba", "root","bandenk");
            } catch (SQLException ex) {
                Logger.getLogger(Koneksi.class.getName()).log(Level.SEVERE, null, ex);
            }

        }
        return connection;
    }

    public static KaryawanDao getKaryawanDao() {
        if (karyawanDao==null){
            karyawanDao = new KaryawanDaoImpl(getConnection())
        }
        return karyawanDao;
    }

}

Dengan adanya class utilty tersebut, kita akan membuat objek DAO tersebut menjadi seperti ini.


KaryawanDao dao = Koneksi.getKaryawanDao();

bukan


KaryawanDao dao = new KaryawanDaoImpl();

Teknik ini biasanya dikenal dengan istilah Dependency Injection.

Nah, kemudian kita pindah ke form yang telah kita buat tadi, untuk kita isi dengan business logic aplikasi kita. Pertama, kita buat dulu inner class yang meng-extends class AbstractTableModel. Fungsi kelas ini adalah untuk memudahkan kita didalam memanipulasi JTable. Di dalam constructor kita buat objek table modelnya lalu kita isikan ke dalam jTable1, selain itu kedua JRadioButton yang kita punya, kita masukkan  ke dalam buttonGroup1.

/**
 * FrameKaryawan.java
 *
 * Created on May 8, 2012, 2:13:40 PM
 */

package arya.form;

import arya.entity.Karyawan;
import arya.koneksi.Koneksi;
import java.awt.Image;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.table.AbstractTableModel;

/**
 *
 * @author arya
 */
public class FrameKaryawan extends javax.swing.JFrame {

    private TableModelKaryawan model;
    private List<Karyawan> karyawans;
    private Image image;
    private Karyawan karyawan;
    public FrameKaryawan() {
        initComponents();
        karyawans = new ArrayList();
        buttonGroup1.add(rdPria);
        buttonGroup1.add(rdPerempuan);
        model = new TableModelKaryawan();
        jTable1.setModel(model);
    }
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    private class TableModelKaryawan extends AbstractTableModel{
        private List <Karyawan> list = new ArrayList();

        public void setData(List<Karyawan> list){
            this.list = list;
            fireTableDataChanged();
        }
        public int getRowCount() {
            return list.size();
        }

        public int getColumnCount() {
            return 4;
        }

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

        @Override
        public String getColumnName(int columnIndex) {
            switch(columnIndex){
                case 0 : return "Nama";
                case 1 : return "Alamat";
                case 2 : return "Jenis Kelamin";
                case 3 : return "Tanggal Lahir";
                default: return null;
            }
        }
        public void insertTable(Karyawan karyawan){
            list.add(karyawan);
            fireTableDataChanged();
        }
        public void updateTable(Karyawan karyawan,int rowIndex){
            list.set(rowIndex, karyawan);
            fireTableDataChanged();
        }
        public Karyawan get(int rowIndex){
            return list.get(rowIndex);
        }
    }
}

Kemudian kita buat method untuk me-load seluruh data Karyawan dari database dan juga method untuk mengembalikkan form seperti keadaan semula.


private void loadData(){
        karyawans = Koneksi.getKaryawanDao().getAll();
        model.setData(karyawans);
    }
    private void clear(){
        txtNama.setText("");
        txtAlamat.setText("");
        buttonGroup1.clearSelection();
        jdcLahir.setDate(new Date());
        txtFoto.setText("");
        panelGambar1.setImage(null);
        btnUbah.setEnabled(false);
        btnHapus.setEnabled(false);
        btnSimpan.setEnabled(true);

    }

Method tersebut kita panggil pada saat objek Frame dibuat, maka dari kita panggil method tersebut pada constructor. Skenario aplikasi ini adalah, ketika form pertama kali ditampilkan, maka seluruh data ditampilkan di JTable serta tombol ubah dan hapus kita set enable menjadi false, kedua tombol tersebut diaktifkan pada saat JTable diklik.

Jika sudah selesai, kita beri event pada masing – masing tombol, yang pertama untuk tombol cari atau btnCari. Tombol ini berfungsi untuk mencari gambar di komputer dan menampilkannya ke dalam JPanel. Kodenya sebagai berikut.

private void btnCariActionPerformed(java.awt.event.ActionEvent evt) {
        JFileChooser chooser = new JFileChooser(System.getProperty("user.home"));
        chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
        chooser.setFileFilter(new FileNameExtensionFilter("jpg|png|bmp", "jpg","png","bmp"));

        if(chooser.showOpenDialog(this)==JFileChooser.APPROVE_OPTION){
            File file=chooser.getSelectedFile();
            try {
                image = ImageIO.read(file);
                panelGambar1.setImage(image);
            } catch (IOException ex) {
                Logger.getLogger(FrameKaryawan.class.getName()).log(Level.SEVERE, null, ex);
            }
            txtFoto.setText(file.getAbsolutePath());
        }
    }

Kemudian dibawah ini adalah kode untuk event tombo simpan atau btnSimpan.

private void btnSimpanActionPerformed(java.awt.event.ActionEvent evt) {
        karyawan = new Karyawan();
        karyawan.setNama(txtNama.getText());
        karyawan.setAlamat(txtAlamat.getText());
        karyawan.setTglLahir(jdcLahir.getDate());
        if (rdPria.isSelected()){
            karyawan.setJenisKelamin("Laki - Laki");
        }else{
            karyawan.setJenisKelamin("Perempuan");
        }

        if(!txtFoto.getText().equals(&quot;&quot;)){
            ObjectOutputStream objectOutputStream=null;
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            try {
                objectOutputStream = new ObjectOutputStream(outputStream);
                ImageIcon icon = new ImageIcon(image);
                objectOutputStream.writeObject(icon);
                objectOutputStream.flush();
                objectOutputStream.close();
            } catch (IOException ex) {
                Logger.getLogger(FrameKaryawan.class.getName()).log(Level.SEVERE, null, ex);
            }
            karyawan.setFoto(outputStream.toByteArray());
        }
        Koneksi.getKaryawanDao().save(karyawan);
        loadData();
        clear();
    }

Supaya gambar bisa disimpan ke dalam database saya harus merubah gambarnya yang bertipe Image menjadi ImageIcon, karena kalau tidak saya mendapat pesan error.

“java.io.NotSerializableException: java.awt.image.BufferedImage”

Kemudian untuk tombol ubahnya atau btnUbah

private void btnUbahActionPerformed(java.awt.event.ActionEvent evt) {
        karyawan.setNama(txtNama.getText());
        karyawan.setAlamat(txtAlamat.getText());
        karyawan.setTglLahir(jdcLahir.getDate());
        if (rdPria.isSelected()){
            karyawan.setJenisKelamin("Laki - Laki");
        }else{
            karyawan.setJenisKelamin("Perempuan");
        }

        if(!txtFoto.getText().equals("")){
            ObjectOutputStream objectOutputStream=null;
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            try {
                objectOutputStream = new ObjectOutputStream(outputStream);
                ImageIcon icon = new ImageIcon(image);
                objectOutputStream.writeObject(icon);
                objectOutputStream.flush();
            } catch (IOException ex) {
                Logger.getLogger(FrameKaryawan.class.getName()).log(Level.SEVERE, null, ex);
            }
            karyawan.setFoto(outputStream.toByteArray());
        }
        Koneksi.getKaryawanDao().update(karyawan);
        loadData();
        clear();
    }

Untuk tombol hapus atau btnHapus kodenya seperti ini.

 private void btnHapusActionPerformed(java.awt.event.ActionEvent evt) {
        Koneksi.getKaryawanDao().delete(karyawan);
        loadData();
        clear();
    }

Sedangkan untuk tombol Batal, cukup panggil method clear saja.

private void btnBersihActionPerformed(java.awt.event.ActionEvent evt) {
        clear();
    }

Kemudian tambahkan pada constructor, event ketika JTable diklik maka data karyawan yang diklik akan tampil pada semua komponen seperti textfield, radiobutton dan yang lainnya.

public FrameKaryawan() {
        initComponents();
        buttonGroup1.add(rdPria);
        buttonGroup1.add(rdPerempuan);
        model = new TableModelKaryawan();
        jTable1.setModel(model);
        karyawans = new ArrayList();
        loadData();
        jTable1.getSelectionModel().addListSelectionListener(new ListSelectionListener() {

            public void valueChanged(ListSelectionEvent lse) {
                int row = jTable1.getSelectedRow();
                if (row !=-1){
                    karyawan = model.get(row);
                    txtNama.setText(karyawan.getNama());
                    txtAlamat.setText(karyawan.getAlamat());
                    jdcLahir.setDate(karyawan.getTglLahir());
                    if (karyawan.getJenisKelamin().equalsIgnoreCase("Laki - Laki")){
                        rdPria.setSelected(true);
                    }else{
                        rdPerempuan.setSelected(true);
                    }
                    if (karyawan.getFoto()!=null){
                        try {
                            ObjectInputStream inputStream = new ObjectInputStream(new ByteArrayInputStream(model.get(row).getFoto()));
                            ImageIcon icon  =  (ImageIcon) inputStream.readObject();
                            image = icon.getImage();
                            panelGambar1.setImage(image);
                            inputStream.close();
                        } catch (ClassNotFoundException ex) {
                            Logger.getLogger(FrameKaryawan.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (IOException ex) {
                            Logger.getLogger(FrameKaryawan.class.getName()).log(Level.SEVERE, null, ex);
                        }

                    }
                }
                btnUbah.setEnabled(true);
                btnHapus.setEnabled(true);
                btnSimpan.setEnabled(false);
            }
        });
    }

Coba compile dan jalankan aplikasi tersebut, jika tidak ada error, maka hasinya akan seperti ini.

Untuk file latihannya dapat didownload disini.

Semoga Bermanfaat :D

About these ads

Comments on: "Menyimpan Gambar ke dalam Database (Java)" (47)

  1. mas bisa liat database nya ga ?
    type gambar dalam databae nya apa ?
    makasih

    • type gambar yang digunakan adalah blob.

      CREATE TABLE Karyawan(
      id int PRIMARY KEY AUTO_INCREMENT,
      nama VARCHAR(50) NOT NULL,
      alamat VARCHAR(100) NOT NULL,
      jenisKelamin VARCHAR(15) NOT NULL,
      tglLahir DATE,
      foto BLOB);
      

  2. gan, utk nampung image itu pke panel biasa atau panel khusus ??

  3. mas saya bisa menampilkan gambar seperti tutorial yang mas kasih tapi adsa permasalahan ketika pembuatan report,report data gambar nya tidak mau muncul tapi ketika data gambar di isi manual bisa di munculkan kira kira gimana ya mas

  4. mas mau tanya itu JPanelnya kok sampai JPanel6 itu buat apa ya,saya lihat gak ada JPanel lg?? mohon bantuannya :)

  5. mas…, tanya nie….,
    q dah melakukan langkah2 seperti di atas, tp kenapa gambarnya ga muncul ya…., q pake jinternalframe
    terimakasih

  6. ngambil panelGambar dari frameKaryawan gimana ya ?

  7. mas … panelGambar1.setImage(image); d tmpatq g’ bisa, ada tmbahan source yg lain jga y ?

  8. link download nya error mas…

  9. maaf mas, masih belum mau, hehe..

  10. Desvianus said:

    ‘Save Images.rar’ is unavailable. File ini tidak lagi tersedia karena identik dengan file yang dilarang karena adanya klaim.

  11. mas, file Save Images.rar nya udah diapus ya? gak bisa didownload. mohon upload lagi dong mas. makasih..

  12. Linknya broken bang…!

    Ada link yang baru gak???

    Syukron

  13. yg di cari2 akhir@ nemu di sini..
    thank bget udh mau berbagi..

    oa ane bgi tips bgi yg mau download tutorial yg ini…
    linknya sih emang agk bermasalah… tpi filenya msih bisa di download..
    caranya klik pada tombol “Tambah Ke Akun Saya” bgi yg udah ad akun 4share..
    trus buka akun anda & klik aj file yg baru di tambhkan…
    nah tinggal download akhirnya…
    moga bermanfaat…

  14. mas bisa minta program ya gak

    biar mudah dipelajari

  15. mas gak bisa di download ni,
    tolong kirim email aja ya projectnya kalo berkanan :)

  16. dah bisa mas …
    makasih banyak atas tutorialnya ..

    ini bener – bener bermanfaat buat saya :)

    di tunggu tutorial – tutorial selanjutnya

  17. Cara downloadnya, dengan membuat akun di 4shared… lalu cari tombol tambah ke akun saya… login k 4shared.. baru download

  18. mas saya bisa sourcenya sebab gak bisa didownload tlng kirim ke email govindasurya13@gmail.com

  19. om… udh gk bisa di download file latihannya..

    tolong om kirim ke pringgo.prasetyo@gmail.com

    thanks

  20. beeboypralienka said:

    Ga bisa di-donlod gan..
    ‘save images.rar’ is unavailable. File ini tidak lagi tersedia karena identik dengan file yang dilarang karena adanya klaim.

  21. Link nya ditunggu ya gan….

  22. kak nggak bisa downld :(
    bisa dkirim nggak kak?
    soalnya lagi butuuuuuh bangeeeet,
    kalo bisa, ni email aq melindathesa@gmail.com
    mkasih :)

  23. help ajja mas,, linkx g’ berfungsi lagi……riorefaldi@rocketmail.com

  24. “panelGambar1″ mas gimana bisa di “setImage” ? adakah source tambahan ?ato di JPanel di olah dulu supaya bisa di “setImage ” ? :D

  25. Yusticia Rhema said:

    mas. link downloadnya kok error y ??? aku butuh banget soalnya
    terus waktu aku nyoba . panelGambar1.setImage(null); itu gak mau . . Aku bingung maksudnya dari panelGambar1 itu berasal dari FormPanelGambar . apa dr Form Karyawan yang ada panelnya tetapi namanya panelGambar1 ??
    tolong mas. . secepatnya .
    klo boleh juga . ini email saya justinisme77@gmail.com
    Trims mas :)

  26. ga bisa di download mas, add to my account juga gi bisa?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

%d bloggers like this: