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

huhhh….
nanti kita lanjut ke Swing MVC yang lebih rumit
Bagus SuHu…..
yang contoh MySQLnya donk
makasih ya echo.atas postingnya swing mvc nya
echo yang berbentuk pdfnya mana? waduh gimana cara ubah ke pdfnya?
tinggal di save page aja mas
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…
heheh, gw kan dah bilang kalo contohnya pake JPA, jadi gak da proses pengetikan :
hehehe, mungkin nanti gw kasih tutorial tentang JPA
Iya donk mas echo, kalau mau pakai JPA kasih tutorial dulu donk tentang JPA, biar kita jadi ngerti, Thx SuHu
hehehe, ok2
tengkyu, lagi belajar java nih..
Mampir mapir eh masuk sini
Duh duh ane bingung nih mo ngomong apa ya bang, maju terus blogger Indonesia
nais info bos
terima kasih bro, postingannya sangat membantu saya
keep posting!
thanks banyak bro atas tutorial na,
bermanfaan banged..
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.
[...] contoh penerapan konsep mvc di swing (1) [...]
wow….. keren
[...] contoh penerapan konsep mvc di swing (1) [...]
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……
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..
mas, kapan lanjutan episode 2 nya ? hehe ;p
udah ga sabaran lagi ne menunggu kungfu nya mas..
mantap bro tutorialnya….lagi belajar java juga nih dengan konsep MVC-nya
Mantap Bro
aq jg baru mw belajar Java Spring MVC + Hibernate
IDE= Netbeans 6.5
ada tutorialnya ga?
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
thx banget
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
tinggal run : java -jar namafile.jar
dikomputer manapun, sama aja cara jalaninnya
nuumpang seedot y broow….makasih banyak2….semoga jadi programer yang mabrur..amin…^_^