Juallah Kepandaianmu dan Belilah Kebingungan!

contoh penerapan konsep MVC di Swing (1)

Posted in Java Programming by Eko Kurniawan Khannedy on 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:

27 Tanggapan

Subscribe to comments with RSS.

  1. echo said, on 17 November 2008 at 19:57

    huhhh….

    nanti kita lanjut ke Swing MVC yang lebih rumit :D

  2. Feri said, on 17 November 2008 at 22:40

    Bagus SuHu…..
    yang contoh MySQLnya donk :D

  3. bagussu giono said, on 18 November 2008 at 08:26

    makasih ya echo.atas postingnya swing mvc nya

  4. bagussu giono said, on 18 November 2008 at 08:33

    echo yang berbentuk pdfnya mana? waduh gimana cara ubah ke pdfnya?

  5. echo said, on 18 November 2008 at 10:01

    tinggal di save page aja mas :D

  6. star said, on 18 November 2008 at 16:38

    iya neh echo..klo pake MySQL biasa gmna??
    setingan koneksinya dmana??
    karna setelah gw perhatiin di atas ga ada tuk setingan koneksi ke databasenya…gw pengen bgt tw kalo menggunakn MySQL gmna…
    makch seblumnya yow…

  7. echo said, on 18 November 2008 at 17:16

    heheh, gw kan dah bilang kalo contohnya pake JPA, jadi gak da proses pengetikan :

    INSERT INTO PEOPLE VALUES (?,?,?,?);
    

    hehehe, mungkin nanti gw kasih tutorial tentang JPA :D

  8. Feri said, on 19 November 2008 at 08:36

    Iya donk mas echo, kalau mau pakai JPA kasih tutorial dulu donk tentang JPA, biar kita jadi ngerti, Thx SuHu

  9. echo said, on 19 November 2008 at 09:59

    hehehe, ok2

  10. misisawa said, on 18 Desember 2008 at 08:54

    tengkyu, lagi belajar java nih.. :)

  11. Lowongan CPNS said, on 13 Januari 2009 at 00:33

    Mampir mapir eh masuk sini
    Duh duh ane bingung nih mo ngomong apa ya bang, maju terus blogger Indonesia

  12. jolly said, on 21 Januari 2009 at 15:42

    nais info bos :mrgreen:

  13. Widya Perwira said, on 22 Januari 2009 at 22:16

    terima kasih bro, postingannya sangat membantu saya :D

    keep posting! :D

  14. ariez said, on 12 Maret 2009 at 07:44

    thanks banyak bro atas tutorial na,

    bermanfaan banged.. :D

    tinggal ane kembangin lagi..

    kl boleh sekalian tutorial tekhnik swingmakeover na dund

    biar lebih keren tampilan na seperti yg ente buat..

    tankyu banged ne atas bimbingan na.

  15. Belajar JaVa « WAHYU FIGHTER said, on 5 April 2009 at 03:25

    [...] contoh penerapan konsep mvc di swing (1) [...]

  16. kikiiskandar said, on 7 April 2009 at 10:30

    wow….. keren

  17. [...] contoh penerapan konsep mvc di swing (1) [...]

  18. echote said, on 1 Juni 2009 at 21:16

    saran gw sih buat teman2……
    sebaiknya cobain dulu cari tentang suatu hal…
    kan banyak tuh materi di internet…..
    misalnya blom nyari materi mengenai MVC eh, langsung nyuruh buat tutorial…
    saran gw sih, sebaiknya kita cari dulu sendiri materinya…
    nah, kl emang udah usaha dan nggak bisa baru nanya ke ahlinya…
    *kyk mas echo ini….

    maksih, cuma saran aja……

  19. kampus said, on 5 Juli 2009 at 14:06

    Wah keren bos….
    Hebat…..
    Salut……
    Bener2 fully java technical..
    Gimana cara spt jadi lo….
    Gua asik belajar2 konsep’a aja…
    Kalo da bnyk code’a…da pusing gua..

  20. anto said, on 7 Juli 2009 at 21:20

    mas, kapan lanjutan episode 2 nya ? hehe ;p
    udah ga sabaran lagi ne menunggu kungfu nya mas..

  21. deerawan said, on 13 Juli 2009 at 10:23

    mantap bro tutorialnya….lagi belajar java juga nih dengan konsep MVC-nya

  22. bas said, on 15 Juli 2009 at 16:41

    Mantap Bro
    aq jg baru mw belajar Java Spring MVC + Hibernate
    IDE= Netbeans 6.5

    ada tutorialnya ga?

  23. deerawan said, on 16 Juli 2009 at 10:02

    bro, buat controller….ini satu event satu kelas controller baru ya…..berarti klo ada dua tombol button….ada dua kelas controller implement actionListener dong.

    repot juga niy bos….bisa disatuin ga siy?

    thanks

  24. hkhotimah said, on 2 Oktober 2009 at 11:47

    thx banget

  25. kojel said, on 3 November 2009 at 09:11

    om echo klo keseluruhan project dah jadi, truz kita jadiin file jar itu gmn cara buat nya….? n biar bisa di jalanin di komputer orang laen….hehe tq2

    • Eko Kurniawan Khannedy said, on 3 November 2009 at 11:39

      tinggal run : java -jar namafile.jar

      dikomputer manapun, sama aja cara jalaninnya

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

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


Tinggalkan Balasan