Eko Kurniawan Khannedy

contoh penerapan konsep MVC di Swing (1)

Ditulis dalam Java Programming oleh Eko Kurniawan Khannedy pada 17 November 2008

kemaren ada temen2 yang agak kurang jelas tentang konsep MVC, maksudnya bukan konsepnya, tapi implementasinya di Swing.

so gw bikinin sekarang tutorialnya di blog yang sedang lo baca, supaya ilmunya bukan buat temen gw juga tapi buat semua yang baca :D

so gw bahas dulu sedikit tentang konsep MVC :D

MVC (Model View Controller) merupakan konsep dimana kalo kita bikin program, semuanya dibagi 3 bagian, Model, View, dan COntroller. apa tuh?

Model itu…, ya model. lebih jelasnya model itu merupakan penampung data. Misal kalo kita punya tabel Identitas di dalam database, maka model metupakan class yang bertugas sebagai penampung data tersebut. jadi bisa dibilang representasi dari tabel yang ada di database (itu kalo aplikasi lo pake database).

View merupakan komponen yang terlihat ato langsung berinteraksi ama user. misal view itu adalah FOrm ato DIalog ato TextBox, Button and lain-lain yang terlihat langsung oleh user dan bisa berinsteraksi langsung dengan user.

Controller merupakan pengkontroll ato kalo gw lebih seneng memangilnya sebagai pemanipulsi di data (Model), jadi dalam controller yang ada cuma proses manipulasi dan controller ini bertugas di belakang layar :D

oke, sekarang gw kasih contoh simple tentang penerapan konsep MVC di Swing.

KASUS :

misal gw mo bikin MVC buat data Anggota yang ada dalam Database yang terdiri dari colom kayak dibawah ini :

CREATE TABLE ORANG(
    EMAIL VARCHAR(255) PRIMARY KEY,
    NAMA VARCHAR(255) NOT NULL,
    TANGGAL_LAHIR DATE NOT NULL,
    JENIS_KELAMIN ENUM('PRIA','WANITA') NOT NULL,
    ALAMAT TEXT NOT NULL
);

PERTANYAANNYA :

gimana bikin MVC-nya di Swing ?

nah pertama buat model dari tabel Orang yang ada dalam database tersebut :
gw pake JPA sebagai koneksi Program ke Database, kalo u pake Hibernate, JDO ato JDBC, tinggal disesuaikan saja :D

/*
 *  DILARANG MENGUBAH ATAU MENGHAPUS HAK CIPTA INI.
 *
 *  Hak Cipta 2008 Eko Kurniawan Khannedy.
 *
 *  Semua isi dalam file ini adalah hak milik dari Eko Kurniawan Khannedy.
 *  Anda tak diperkenankan untuk menggunakan file atau mengubah file ini
 *  kecuali Anda tidak menghapus atau merubah hak cipta ini.
 *
 *  Pemilik tidak bertanggung jawab jika Anda menyalah gunakan file ini
 *  dan Pemilik TIDAK MENJAMIN apapun atas file ini.
 *
 *  Anda bisa menghubungi pemilik hak cipta ini di :
 *  email : echo.khannedy@gmail.com
 *  blog : http://eecchhoo.wordpress.com/
 *  ym : echo_khannedy
 */
package org.eecchhoo.wordpress.mvc.model;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 *
 * @author echo
 */
@Entity
@Table(name = "orang")
public class Orang implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "EMAIL", nullable = false)
    private String email;

    @Column(name = "NAMA", nullable = false)
    private String nama;

    @Column(name = "TANGGAL_LAHIR", nullable = false)
    @Temporal(TemporalType.DATE)
    private Date tanggalLahir;

    @Column(name = "JENIS_KELAMIN", nullable = false)
    private String jenisKelamin;

    @Lob
    @Column(name = "ALAMAT", columnDefinition = "TEXT", nullable = false)
    private String alamat;

    public Orang() {
    }

    public Orang(String email) {
        this.email = email;
    }

    public Orang(String email, String nama, Date tanggalLahir, String jenisKelamin, String alamat) {
        this.email = email;
        this.nama = nama;
        this.tanggalLahir = tanggalLahir;
        this.jenisKelamin = jenisKelamin;
        this.alamat = alamat;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getNama() {
        return nama;
    }

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

    public Date getTanggalLahir() {
        return tanggalLahir;
    }

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

    public String getJenisKelamin() {
        return jenisKelamin;
    }

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

    public String getAlamat() {
        return alamat;
    }

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

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (email != null ? email.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Orang)) {
            return false;
        }
        Orang other = (Orang) object;
        if ((this.email == null && other.email != null) || (this.email != null && !this.email.equals(other.email))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "org.eecchhoo.wordpress.mvc.model.Orang[email=" + email + "]";
    }
}

kalo u gak ngerti soal JPA, jangan terlalu pedulikan annotation @Coloum, @Id or anything, karena itu emang dipake karena gw pake JPA kalo u gak pake JPA hapus aja annotationnya :D

sekarang kita buat Viewnya.

gw buat JDialog sebagai VIewnya, terserah u sich, mo JPanel kek, mo JDialog kek asalkan container :D dan gw saranin pake NetBeans, tapi kalo gak mo pake jg gak papa, yang penting harus terlihat seperti pada gambar dibawah ini :

image

ato kalo gak mo pake netbeans, silahkan copy sourcecode ini :

/*
 *  DILARANG MENGUBAH ATAU MENGHAPUS HAK CIPTA INI.
 *
 *  Hak Cipta 2008 Eko Kurniawan Khannedy.
 *
 *  Semua isi dalam file ini adalah hak milik dari Eko Kurniawan Khannedy.
 *  Anda tak diperkenankan untuk menggunakan file atau mengubah file ini
 *  kecuali Anda tidak menghapus atau merubah hak cipta ini.
 *
 *  Pemilik tidak bertanggung jawab jika Anda menyalah gunakan file ini
 *  dan Pemilik TIDAK MENJAMIN apapun atas file ini.
 *
 *  Anda bisa menghubungi pemilik hak cipta ini di :
 *  email : echo.khannedy@gmail.com
 *  blog : http://eecchhoo.wordpress.com/
 *  ym : echo_khannedy
 */
package org.eecchhoo.wordpress.mvc.view;

/**
 *
 * @author echo
 */
public class DialogOrang extends javax.swing.JDialog {

    private static final long serialVersionUID = 1L;

    public DialogOrang(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
    }

    //
    private void initComponents() {

        labelJudul = new javax.swing.JLabel();
        panel = new javax.swing.JPanel();
        labelEmail = new javax.swing.JLabel();
        labelNama = new javax.swing.JLabel();
        labelKelamin = new javax.swing.JLabel();
        labelTanggal = new javax.swing.JLabel();
        labelAlamat = new javax.swing.JLabel();
        textEmail = new javax.swing.JTextField();
        textNama = new javax.swing.JTextField();
        comboJenisKelamin = new javax.swing.JComboBox();
        textTanggalLahir = new javax.swing.JFormattedTextField();
        jScrollPane1 = new javax.swing.JScrollPane();
        textAlamat = new javax.swing.JTextArea();
        tombolOK = new javax.swing.JButton();
        tombolBatal = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Orang");

        labelJudul.setFont(new java.awt.Font("Tahoma", 1, 24)); // NOI18N
        labelJudul.setText("ORANG");
        labelJudul.setName("labelJudul"); // NOI18N

        panel.setName("panel"); // NOI18N

        labelEmail.setText("Email");
        labelEmail.setName("labelEmail"); // NOI18N

        labelNama.setText("Nama");
        labelNama.setName("labelNama"); // NOI18N

        labelKelamin.setText("Jeni Kelamin");
        labelKelamin.setName("labelKelamin"); // NOI18N

        labelTanggal.setText("Tanggal Lahir ");
        labelTanggal.setName("labelTanggal"); // NOI18N

        labelAlamat.setText("Alamat");
        labelAlamat.setName("labelAlamat"); // NOI18N

        textEmail.setName("textEmail"); // NOI18N

        textNama.setName("textNama"); // NOI18N

        comboJenisKelamin.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "PRIA", "WANITA" }));
        comboJenisKelamin.setName("comboJenisKelamin"); // NOI18N

        textTanggalLahir.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.DateFormatter(java.text.DateFormat.getDateInstance(java.text.DateFormat.LONG))));
        textTanggalLahir.setName("textTanggalLahir"); // NOI18N
        textTanggalLahir.setValue(new java.util.Date());

        jScrollPane1.setName("jScrollPane1"); // NOI18N

        textAlamat.setColumns(20);
        textAlamat.setRows(5);
        textAlamat.setName("textAlamat"); // NOI18N
        jScrollPane1.setViewportView(textAlamat);

        org.jdesktop.layout.GroupLayout panelLayout = new org.jdesktop.layout.GroupLayout(panel);
        panel.setLayout(panelLayout);
        panelLayout.setHorizontalGroup(
            panelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(panelLayout.createSequentialGroup()
                .addContainerGap()
                .add(panelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
                    .add(labelTanggal, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .add(labelAlamat, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .add(labelKelamin, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .add(labelNama, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .add(labelEmail, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
                .add(panelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 501, Short.MAX_VALUE)
                    .add(textNama, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 501, Short.MAX_VALUE)
                    .add(textEmail, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 501, Short.MAX_VALUE)
                    .add(comboJenisKelamin, 0, 501, Short.MAX_VALUE)
                    .add(textTanggalLahir, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 501, Short.MAX_VALUE))
                .addContainerGap())
        );
        panelLayout.setVerticalGroup(
            panelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(panelLayout.createSequentialGroup()
                .addContainerGap()
                .add(panelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(labelEmail)
                    .add(textEmail, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
                .add(panelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(labelNama)
                    .add(textNama, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
                .add(panelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(labelKelamin)
                    .add(comboJenisKelamin, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
                .add(panelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(labelTanggal)
                    .add(textTanggalLahir, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
                .add(panelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(labelAlamat)
                    .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 127, Short.MAX_VALUE))
                .addContainerGap())
        );

        tombolOK.setText("OK");
        tombolOK.setName("tombolOK"); // NOI18N

        tombolBatal.setText("Batal");
        tombolBatal.setName("tombolBatal"); // NOI18N

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .addContainerGap()
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
                    .add(org.jdesktop.layout.GroupLayout.LEADING, panel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup()
                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
                            .add(layout.createSequentialGroup()
                                .add(labelJudul)
                                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 463, Short.MAX_VALUE))
                            .add(layout.createSequentialGroup()
                                .add(tombolBatal)
                                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)))
                        .add(tombolOK)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .addContainerGap()
                .add(labelJudul)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(panel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(tombolOK)
                    .add(tombolBatal))
                .addContainerGap())
        );

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-634)/2, (screenSize.height-395)/2, 634, 395);
    }//                         

    // Variables declaration - do not modify
    protected javax.swing.JComboBox comboJenisKelamin;
    protected javax.swing.JScrollPane jScrollPane1;
    protected javax.swing.JLabel labelAlamat;
    protected javax.swing.JLabel labelEmail;
    protected javax.swing.JLabel labelJudul;
    protected javax.swing.JLabel labelKelamin;
    protected javax.swing.JLabel labelNama;
    protected javax.swing.JLabel labelTanggal;
    protected javax.swing.JPanel panel;
    protected javax.swing.JTextArea textAlamat;
    protected javax.swing.JTextField textEmail;
    protected javax.swing.JTextField textNama;
    protected javax.swing.JFormattedTextField textTanggalLahir;
    protected javax.swing.JButton tombolBatal;
    protected javax.swing.JButton tombolOK;
    // End of variables declaration
}

panjangkan? heheh gw bilang suruh pake NetBeans gak mao :P

nach berarti sekarang u dah bikin Viewnya, tinggal menkoneksiin Model ama View, caranya?

pertama kita buat property Model lalu getter dan setternya, jadi tabahin source code kayak gini di DialogOrang :

    private Orang model;

    public Orang getModel() {
        return model;
    }

    public void setModel(Orang model) {
        this.model = model;
    }

setelah itu manipulasi metode getModel ama setModel agar bisa berkomunikasi ama textfield yang ada di JDialog Orang tadi yang kita buat jadi kurang lebih seperti ini :

    public Orang getModel() {
        // buat model baru jika null
        if (model == null) {
            model = new Orang();
        }

        // dapatkan nilai dari input
        model.setAlamat(textAlamat.getText());
        model.setEmail(textEmail.getText());
        model.setJenisKelamin((String) comboJenisKelamin.getSelectedItem());
        model.setTanggalLahir((Date) textTanggalLahir.getValue());

        return model;
    }

    public void setModel(Orang model) {
        // cek apakah model masukan null
        if (model == null) {
            throw new NullPointerException("Model Tak Boleh Null");
        }

        this.model = model;

        // tambahkan ke input
        textAlamat.setText(model.getAlamat());
        textEmail.setText(model.getEmail());
        textNama.setText(model.getNama());
        textTanggalLahir.setValue(model.getTanggalLahir());
        comboJenisKelamin.setSelectedItem(model.getJenisKelamin());
    }

nah sekarang tinggal kita buat controller buat proses insert, sory nich di tutorial ini gw cuma proses insert, karena kalo gw buat juga proses update delete ama select, takutnya tutorialnya kepanjangan :D

ok, untuk membuat proses Insert kita gunakan tombol OK yang ada di DialogOrang jadi sekarang kita buat controller (event) buat tombolOK yang ada di DialogOrang :

/*
 *  DILARANG MENGUBAH ATAU MENGHAPUS HAK CIPTA INI.
 *
 *  Hak Cipta 2008 Eko Kurniawan Khannedy.
 *
 *  Semua isi dalam file ini adalah hak milik dari Eko Kurniawan Khannedy.
 *  Anda tak diperkenankan untuk menggunakan file atau mengubah file ini
 *  kecuali Anda tidak menghapus atau merubah hak cipta ini.
 *
 *  Pemilik tidak bertanggung jawab jika Anda menyalah gunakan file ini
 *  dan Pemilik TIDAK MENJAMIN apapun atas file ini.
 *
 *  Anda bisa menghubungi pemilik hak cipta ini di :
 *  email : echo.khannedy@gmail.com
 *  blog : http://eecchhoo.wordpress.com/
 *  ym : echo_khannedy
 */
package org.eecchhoo.wordpress.mvc.controller;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import org.eecchhoo.wordpress.mvc.model.Orang;
import org.eecchhoo.wordpress.mvc.view.DialogOrang;

/**
 *
 * @author echo
 */
public class OrangInsert implements ActionListener {

    private DialogOrang dialogOrang;

    public OrangInsert(DialogOrang dialogOrang) {
        this.dialogOrang = dialogOrang;
    }

    public void actionPerformed(ActionEvent e) {
        Orang orang = dialogOrang.getModel();

        // proses insert ke database (disini pake JPA)
        {
            EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("PersistenceUnit");

            EntityManager entityManager = entityManagerFactory.createEntityManager();
            EntityTransaction transaction = entityManager.getTransaction();

            try {
                transaction.begin();
                entityManager.persist(orang);
                transaction.commit();
            } catch (Exception ex) {
                transaction.rollback();
            }

            entityManagerFactory.close();
        }

        // hilangkan dialog
        dialogOrang.setVisible(false);
    }
}

ok, sekarang kita tambahkan ke tombolOK yang ada di ViewOrang (DialogOrang) :

        // tambahkan ke tombolOK
        tombolOK.addActionListener(new OrangInsert(this));

nah sekarang kita jalankan, pertama buat dulu Formnya :D

/*
 *  DILARANG MENGUBAH ATAU MENGHAPUS HAK CIPTA INI.
 *
 *  Hak Cipta 2008 Eko Kurniawan Khannedy.
 *
 *  Semua isi dalam file ini adalah hak milik dari Eko Kurniawan Khannedy.
 *  Anda tak diperkenankan untuk menggunakan file atau mengubah file ini
 *  kecuali Anda tidak menghapus atau merubah hak cipta ini.
 *
 *  Pemilik tidak bertanggung jawab jika Anda menyalah gunakan file ini
 *  dan Pemilik TIDAK MENJAMIN apapun atas file ini.
 *
 *  Anda bisa menghubungi pemilik hak cipta ini di :
 *  email : echo.khannedy@gmail.com
 *  blog : http://eecchhoo.wordpress.com/
 *  ym : echo_khannedy
 */
package org.eecchhoo.wordpress.mvc;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import org.eecchhoo.wordpress.mvc.model.Orang;
import org.eecchhoo.wordpress.mvc.view.DialogOrang;
import sun.text.normalizer.NormalizerBase.Mode;

/**
 *
 * @author echo
 */
public class FormMain extends JFrame implements ActionListener {

    private static final long serialVersionUID = 1L;

    private JButton button;

    private DialogOrang dialogOrang;

    public FormMain() {
        // tombol buat nambah orang
        button = new JButton("Tambahkan Orang");
        // menambahkan aksi tambah
        button.addActionListener(this);

        // view orang
        dialogOrang = new DialogOrang(this, true);

        // konfigurasi form
        getContentPane().setLayout(new FlowLayout());
        getContentPane().add(button);
        setSize(400, 400);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("MVC Orang");
    }

    public void actionPerformed(ActionEvent e) {
        Orang orang = new Orang("", "", new Date(), "PRIA", "");
        dialogOrang.setModel(orang);
        dialogOrang.setVisible(true);
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                new FormMain().setVisible(true);
            }
        });
    }
}

ok sekarang jalankan :D ini hasilnya :

image

saat u klik tombol “Tambahkan Orang”, maka akan mucul dialog seperti ini :

image

lalu masukkan datanya dan klik tombol OK, misal gw masukkin data seperti digambar ini :

image

dan sekarang terlihat datanya di Database :

image

PERHATIAN!!
tombol Cancel belum berfungsi, jadi tinggal tambah aja aksi untuk menghilangkan DialogOrang pada tombolCancel :D

agar tidak pusing, jadi keseluruhan kode di DialogOrang adalah seperti ini :

/*
 *  DILARANG MENGUBAH ATAU MENGHAPUS HAK CIPTA INI.
 *
 *  Hak Cipta 2008 Eko Kurniawan Khannedy.
 *
 *  Semua isi dalam file ini adalah hak milik dari Eko Kurniawan Khannedy.
 *  Anda tak diperkenankan untuk menggunakan file atau mengubah file ini
 *  kecuali Anda tidak menghapus atau merubah hak cipta ini.
 *
 *  Pemilik tidak bertanggung jawab jika Anda menyalah gunakan file ini
 *  dan Pemilik TIDAK MENJAMIN apapun atas file ini.
 *
 *  Anda bisa menghubungi pemilik hak cipta ini di :
 *  email : echo.khannedy@gmail.com
 *  blog : http://eecchhoo.wordpress.com/
 *  ym : echo_khannedy
 */
package org.eecchhoo.wordpress.mvc.view;

import java.util.Date;
import org.eecchhoo.wordpress.mvc.controller.OrangInsert;
import org.eecchhoo.wordpress.mvc.model.Orang;

/**
 *
 * @author echo
 */
public class DialogOrang extends javax.swing.JDialog {

    private static final long serialVersionUID = 1L;

    private Orang model;

    public DialogOrang(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();

        // tambahkan ke tombolOK
        tombolOK.addActionListener(new OrangInsert(this));
    }

    public Orang getModel() {
        // buat model baru jika null
        if (model == null) {
            model = new Orang();
        }

        // dapatkan nilai dari input
        model.setAlamat(textAlamat.getText());
        model.setEmail(textEmail.getText());
        model.setJenisKelamin((String) comboJenisKelamin.getSelectedItem());
        model.setTanggalLahir((Date) textTanggalLahir.getValue());

        return model;
    }

    public void setModel(Orang model) {
        // cek apakah model masukan null
        if (model == null) {
            throw new NullPointerException("Model Tak Boleh Null");
        }

        this.model = model;

        // tambahkan ke input
        textAlamat.setText(model.getAlamat());
        textEmail.setText(model.getEmail());
        textNama.setText(model.getNama());
        textTanggalLahir.setValue(model.getTanggalLahir());
        comboJenisKelamin.setSelectedItem(model.getJenisKelamin());
    }

    private void initComponents() {
	// ISINYA SAMA KAYAK YANG SEBELUMNYA
    }

    // Variables declaration - do not modify
    protected javax.swing.JComboBox comboJenisKelamin;
    protected javax.swing.JScrollPane jScrollPane1;
    protected javax.swing.JLabel labelAlamat;
    protected javax.swing.JLabel labelEmail;
    protected javax.swing.JLabel labelJudul;
    protected javax.swing.JLabel labelKelamin;
    protected javax.swing.JLabel labelNama;
    protected javax.swing.JLabel labelTanggal;
    protected javax.swing.JPanel panel;
    protected javax.swing.JTextArea textAlamat;
    protected javax.swing.JTextField textEmail;
    protected javax.swing.JTextField textNama;
    protected javax.swing.JFormattedTextField textTanggalLahir;
    protected javax.swing.JButton tombolBatal;
    protected javax.swing.JButton tombolOK;
    // End of variables declaration
}

enjoy :D

nanti kita lanjut ke tutorial MVC yang lainnya :evil:

29 Tanggapan

Subscribe to comments with RSS.

  1. sky said, on 4 November 2009 at 09:27

    nuumpang seedot y broow….makasih banyak2….semoga jadi programer yang mabrur..amin…^_^

  2. debri said, on 28 November 2009 at 21:18

    mmm….

    saya baru belajar mvc, jadi mohon maaf kalo komentar saya ada yang salah.

    untuk mendapatkan objek ‘model’, kenapa model harus dikoneksikan dengan view (adanya getter&setter pada view)? kenapa tidak menggunakan controller saja, bukankah itu gunanya ’si pemanipulasi’ & ’si mak comblang antar view dan model’?

    jadi kalo menggunakan controller kurang lebih seperti ini:

    public class OrangInsert implements ActionListener {

    private DialogOrang dialogOrang;
    private Orang ;

    public OrangInsert(DialogOrang dialogOrang) {
    this.dialogOrang = dialogOrang;

    if (model == null) {
    model = new Orang();
    }

    // dapatkan nilai dari input
    // sori ga tau nama methodnya untuk ngambil inputnya, tapi saya yakin ada
    model.setAlamat(dialogOrang.blablabla.textAlamat.getText());
    model.setEmail(dialogOrang.blablabla.textEmail.getText());
    model.setJenisKelamin(dialogOrang.blablabla.(String) comboJenisKelamin.getSelectedItem());
    model.setTanggalLahir(dialogOrang.blablabla.(Date) textTanggalLahir.getValue());

    }

    Kemudian actionlistener tetep sama:

    // tambahkan ke tombolOK
    tombolOK.addActionListener(new OrangInsert(this));

    Mohon pencerahannya

  3. debri said, on 28 November 2009 at 21:21

    ups…ada yang salah

    dibagian ini:

    private Orang ;

    harusnya begini:

    private Orang model;

    maklum udah malem :D


Tinggalkan Balasan