contoh penerapan konsep MVC di Swing (1)
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
so gw bahas dulu sedikit tentang konsep MVC
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
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
/*
* 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
sekarang kita buat Viewnya.
gw buat JDialog sebagai VIewnya, terserah u sich, mo JPanel kek, mo JDialog kek asalkan container
dan gw saranin pake NetBeans, tapi kalo gak mo pake jg gak papa, yang penting harus terlihat seperti pada gambar dibawah ini :
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
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
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
/*
* 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
ini hasilnya :
saat u klik tombol “Tambahkan Orang”, maka akan mucul dialog seperti ini :
lalu masukkan datanya dan klik tombol OK, misal gw masukkin data seperti digambar ini :
dan sekarang terlihat datanya di Database :
PERHATIAN!!
tombol Cancel belum berfungsi, jadi tinggal tambah aja aksi untuk menghilangkan DialogOrang pada tombolCancel
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
nanti kita lanjut ke tutorial MVC yang lainnya
nuumpang seedot y broow….makasih banyak2….semoga jadi programer yang mabrur..amin…^_^
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
ups…ada yang salah
dibagian ini:
private Orang ;
harusnya begini:
private Orang model;
maklum udah malem