Modul-Pemrograman Berbasis Objek-D3-BSI-September2018 PDF
Modul-Pemrograman Berbasis Objek-D3-BSI-September2018 PDF
BERBASIS OBJEK
Model, View, Controller Structure Code
Modul Praktikum
Oleh
Tim Penyusun
KONSEP MVC
Sebelum dibahas lebih lanjut mengenai praktikum pemrograman berbasis objek pada
modul praktikum ini. Penyusun akan menjabarkan terlebih dahulu batasan spesifikasi
hardware yang dibutuhkan dalam mempelajari bahasan dalam modul praktikum ini. Untuk
editor penulisan kode program disarankan menggunakan editor Netbeans IDE 8.1 atau versi
yang tidak jauh dari itu. Sementara untuk basis data (database) yang digunakan adalah
MySQL, disarankan untuk kemudahan pembelajaran gunakan basis data MySQL yang telah
include dengan web server. Pembuatan basis data dalam modul praktikum ini menggunakan
web server Xampp versi 5.6.33 dengan PHP extension yang telah support dengan mysqli.
Pemrograman berbasis objek sangat identik dengan bahasa pemrograman java yang
mudah dipelajari. Konsep Model View Controller atau biasa dikenal dengan istilah MVC
merupakan teknik pengembangan penulisan kode program yang lebih terstruktur dengan baik.
Pada dasarnya, konsep mvc khususnya dalam pemrograman java adalah memisahkan kode-
kode program kedalam kelas-kelas yang terpisah berdasarkan fungsinya masing-masing dan
Keunggulan dari pemrograman berbasis MVC yaitu, apabila telah dibangun dengan
dasar pemrograman berbasis desktop, dan suatu ketika ingin diubah menjadi berbasis website.
Maka, programmer tidak perlu merubah total struktur kode pada progam, hanya bagian
interfacenya dan yang berhubungan dengan control program saja. Hal ini sesuai dengan slogan
mempresentasikan data.
2. View, pada bagian ini berisi kelas-kelas yang berhubungan dengan interface program
3. Controller, pada bagian ini berisi kelas-kelas yang berfungsi untuk pengaturan atau
Pada modul praktikum ini membahas mengenai satu “project sederhana mengenai
perpustakaan”. Berikut penjabaran basis data yang dibutuhkan dan dibuat menggunakan
1. Buat basis data dengan nama “perpusmvc”, lalu didalamnya buat 4 buah tabel yaitu
2. Tabel “admin”
username Varchar 20
password Varchar 20
3. Tabel “anggota”
nama_anggota Varchar 35
no_telp Varchar 18
email Varchar 25
tgl_daftar Date -
4. Tabel “buku”
judul_buku Varchar 45
pengarang Varchar 35
penerbit Varchar 45
tgl_entry_perpus Date -
jml_buku Int 11
jml_diperpus Int 11
jml_dipinjam Int 11
Statistik Int 11
5. Tabel “peminjaman”
id_anggota Char 6
tgl_pinjam Date -
tgl_batas_kembali Date -
tgl_kembali Date -
denda Int 11
Setelah membuat tabel pada basis data “perpusmvc” isilah 1 buh record untuk tabel
admin, yaitu:
username admin
password admin
Setelah membuat basis data, lalu buatlah project baru pada editor Netbeans, dengan
5. Setelah project baru selesai dibuat, maka akan tampil pada tampilan jendela Project.
(note: jika jendela Projects tidak muncul pada Netbeans, munculkan dengan
6. Langkah selanjutnya adalah membuat package pada projek perpus. Klik Kanan
folder Source Packages project perpus, lalu pilih New – Java Package. Beri nama
“perpus”.
“perpus.model.event”, “perpus.model”.
(Note: Package merupakan suatu folder atau direktori yang berfungsi menampung
8. Berikut tampilan dari project perpus dengan package-package yang telah dibuat:
Penulisan kode program pada modul praktikum ini dibagi-bagi kedalam package-
package yang telah dibuat pada bab sebelumnya. Pembahasan kode program dengan konsep
MVC akan dijabarkan dalam projek perpus ini, dibahas sesuai urutan awal kode program yang
harus dibuat.
Package perpus.entity
Package perpus.entity ini berfungsi sebagai representasi dari masing-masing tabel pada
basis data yang telah dibuat dan atribut yang ada didalamnya.
Buat kelas java pada package perpus.entity dengan cara klik kanan package
perpus.entity, lalu pilih New – Java Class. Buatlah 4 buah kelas masing-masing diberi nama
package perpus.entity;
public Admin() {
}
Lihat struktur Atribut dan tipe data dari masing-masing tabel pada basis data perpusmvc. Lalu
Buat kode program untuk “Anggota.java”, “Buku.java”, “Peminjaman.java”. Contoh
pembuatan kode program Lihat Admin.java, hanya tinggal merubah deklarasi variable yang
disesuaikan dengan tabel pada basis data, kemudiaN buat method Getter dan Setter.
(Note untuk atribut dengan tipe data “Date”, ketikan import java.util.Date;
Package perpus.error ini berisi kelas-kelas yang berisi exception sebagai dokumentasi
peringatan apabila ketika program berjalan atau sedang running dan muncul bug atau kesalah-
kesalahan.
Buat kelas java pada package perpus.error dengan cara klik kanan package
perpus.error, lalu pilih New – Java Class. Buatlah 4 buah kelas masing-masing diberi nama
AdminException.java:
package perpus.error;
/**
Package perpus.service
File-file pada package ini berupa file “interface”, artinya serupa dengan kelas namun
method yang ada didalamnya adalah method abstract yang hanya dideklarasikan tidak ditulis
1. Buat interface java pada package perpus.service dengan cara klik kanan package
perpus.service, lalu pilih New – Java Interface. Buatlah 4 buah interface masing-
1. AdminDao.java :
package perpus.service;
import perpus.entity.Admin;
import perpus.error.AdminException;
2. AnggotaDao.java :
package perpus.service;
import perpus.entity.Anggota;
import perpus.error.AnggotaException;
import java.util.List;
3. BukuDao.java :
package perpus.service;
import perpus.entity.Buku;
import perpus.error.BukuException;
import java.util.List;
4. PeminjamanDao.java :
package perpus.service;
import perpus.entity.Buku;
import perpus.entity.Peminjaman;
import perpus.error.PeminjamanException;
import java.util.List;
Untuk melanjutkan pembahasan pada bab ini, maka harus sudah dibuat terlebih dahulu
“TUGAS MANDIRI BAB II”, yaitu file pada package perpus.entitiy (Anggota.java,
PeminjamanException).
Package perpus.service.impl
Access Object (DAO) seperti insert, update, delete dan query ke basis data. Dalam
pemrograman berbasis MVC, struktur Data Access Object dibuat terpisah dari lapisan yang
lain, sehingga kode program pada aplikasi menjadi lebih terstruktur. Maka apabila ada
kesalahan program pada suatu bagian yang berhubungan dengan operasi akses basis data, bisa
langsung tertuju pada package ini tanpa mengganggu interface view dari user. Kelas-kelas pada
package ini mengimplent dari interface perpus.service yang masih belum ada isi pada
deklarasinya.
Buat kelas java pada package perpus.service.impl dengan cara klik kanan package
perpus.service.impl, lalu pilih New – Java Class. Buatlah 4 buah kelas masing-masing diberi
1. AdminDaoImpl.java :
package perpus.service.impl;
import perpus.entity.Admin;
import perpus.error.AdminException;
import perpus.service.AdminDao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
@Override
public int selectCount(Admin admin) throws AdminException {
PreparedStatement statement = null;
ResultSet resultSet = null;
int rowCount = 0;
try {
connection.setAutoCommit(false);
String selectCount = null;
statement = connection.prepareStatement(selectCount);
statement.setString(1, admin.getUsername());
statement.setString(2, admin.getPassword());
resultSet = statement.executeQuery();
connection.commit();
while (resultSet.next()) {
rowCount = resultSet.getInt(1);
}
} catch (SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new AdminException(exception.getMessage());
} finally {
@Override
public Admin getAdmin(int id_admin) throws AdminException {
PreparedStatement statement = null;
try {
connection.setAutoCommit(false);
statement = connection.prepareStatement(getById);
statement.setInt(1, id_admin);
2. AnggotaDaoImpl.java :
package perpus.service.impl;
import perpus.entity.Anggota;
import perpus.error.AnggotaException;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import perpus.service.AnggotaDao;
public class AnggotaDaoImpl implements AnggotaDao {
private final Connection connection;
connection.commit();
} catch(SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new AnggotaException(exception.getMessage());
} finally {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
if (statement != null) {
try {
statement.close();
} catch (SQLException exception) {
}
}
}
}
connection.commit();
} catch(SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new AnggotaException(exception.getMessage());
} finally {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
if (statement != null) {
try {
connection.commit();
} catch(SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new AnggotaException(exception.getMessage());
} finally {
if (statement != null) {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
try {
statement.close();
} catch (SQLException exception) {
}
}
}
}
while(result.next()){
Anggota anggota = new Anggota();
anggota.setId_anggota(result.getString("id_anggota"));
anggota.setNama_anggota(result.getString("nama_anggota"));
anggota.setAlamat(result.getString("alamat"));
anggota.setNo_telp(result.getString("no_telp"));
anggota.setEmail(result.getString("email"));
anggota.setTgl_daftar(result.getDate("tgl_daftar"));
list.add(anggota);
}
connection.commit();
return list;
} catch (SQLException exception) {
try {
3. BukuDaoImpl.java :
package perpus.service.impl;
import perpus.entity.Buku;
import perpus.error.BukuException;
import perpus.service.BukuDao;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
private final String top10Buku = "SELECT judul_buku, statistik FROM buku ORDER
BY statistik DESC limit 10";
connection.commit();
} catch(SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new BukuException(exception.getMessage());
} finally {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
if (statement != null) {
try {
statement.close();
} catch (SQLException exception) {
}
}
}
}
@Override
public void updateBuku(Buku buku) throws BukuException {
PreparedStatement statement = null;
try {
connection.setAutoCommit(false);
statement = connection.prepareStatement(updateBuku);
statement.setString(1, buku.getJudul_buku());
statement.setString(2, buku.getPengarang());
statement.setString(3, buku.getPenerbit());
statement.setInt(4, buku.getJml_buku());
statement.setInt(5, buku.getJml_diperpus());
statement.setInt(6, buku.getJml_dipinjam());
connection.commit();
} catch(SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new BukuException(exception.getMessage());
} finally {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
if (statement != null) {
try {
statement.close();
} catch (SQLException exception) {
}
}
}
}
@Override
public void updatePinjamBuku(String kode_buku) throws BukuException {
PreparedStatement statement = null;
try {
connection.setAutoCommit(false);
statement = connection.prepareStatement(updatePinjamBuku);
statement.setString(1, kode_buku);
statement.executeUpdate();
connection.commit();
} catch(SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new BukuException(exception.getMessage());
} finally {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
if (statement != null) {
try {
statement.close();
} catch (SQLException exception) {
}
@Override
public void updatePengembalian(String kode_buku) throws BukuException {
PreparedStatement statement = null;
try {
connection.setAutoCommit(false);
statement = connection.prepareStatement(updatePengembalianBuku);
statement.setString(1, kode_buku);
statement.executeUpdate();
connection.commit();
} catch(SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new BukuException(exception.getMessage());
} finally {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
if (statement != null) {
try {
statement.close();
} catch (SQLException exception) {
}
}
}
}
@Override
public void deleteBuku(String kode_buku) throws BukuException {
PreparedStatement statement = null;
try {
connection.setAutoCommit(false);
statement = connection.prepareStatement(deleteBuku);
statement.setString(1, kode_buku);
statement.executeUpdate();
connection.commit();
} catch(SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new BukuException(exception.getMessage());
@Override
public Buku getBuku(String kode_buku) throws BukuException {
PreparedStatement statement = null;
try {
connection.setAutoCommit(false);
statement = connection.prepareStatement(getById);
statement.setString(1, kode_buku);
while(result.next()){
Buku buku = new Buku();
buku.setJudul_buku(result.getString("judul_buku"));
buku.setStatistik(result.getInt("statistik"));
list.add(buku);
}
connection.commit();
return list;
} catch (SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new BukuException(exception.getMessage());
} finally {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
if (statement != null) {
try {
statement.close();
} catch (SQLException exception) {
}
}
}
}
@Override
public List<Buku> top10BukuBaru() throws BukuException {
Statement statement = null;
List<Buku> list = new ArrayList<Buku>();
while(result.next()){
Buku buku = new Buku();
buku.setJudul_buku(result.getString("judul_buku"));
list.add(buku);
}
connection.commit();
return list;
} catch (SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new BukuException(exception.getMessage());
} finally {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
if (statement != null) {
try {
statement.close();
} catch (SQLException exception) {
}
}
}
}
@Override
public List<Buku> selectAllBuku() throws BukuException {
Statement statement = null;
List<Buku> list = new ArrayList<Buku>();
try {
connection.setAutoCommit(false);
statement = connection.createStatement();
while(result.next()){
Buku buku = new Buku();
buku.setKode_buku(result.getString("kode_buku"));
buku.setJudul_buku(result.getString("judul_buku"));
buku.setPengarang(result.getString("pengarang"));
buku.setPenerbit(result.getString("penerbit"));
buku.setTgl_entry_perpus(result.getDate("tgl_entry_perpus"));
@Override
public List<Buku> top10BukuFavorit() throws BukuException {
Statement statement = null;
List<Buku> list = new ArrayList<Buku>();
try {
connection.setAutoCommit(false);
statement = connection.createStatement();
while(result.next()){
Buku buku = new Buku();
buku.setJudul_buku(result.getString("judul_buku"));
buku.setStatistik(result.getInt("statistik"));
list.add(buku);
}
connection.commit();
return list;
} catch (SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
4. PeminjamanDaoImpl.java :
package perpus.service.impl;
import perpus.entity.Peminjaman;
import perpus.error.PeminjamanException;
import perpus.service.PeminjamanDao;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
statement.executeUpdate();
connection.commit();
} catch(SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new PeminjamanException(exception.getMessage());
} finally {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
if (statement != null) {
try {
statement.close();
} catch (SQLException exception) {
}
}
}
}
connection.commit();
} catch(SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new PeminjamanException(exception.getMessage());
} finally {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
if (statement != null) {
try {
statement.close();
} catch (SQLException exception) {
}
}
}
}
connection.commit();
} catch(SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new PeminjamanException(exception.getMessage());
} finally {
try {
connection.setAutoCommit(true);
} catch (SQLException ex) {
}
if (statement != null) {
try {
statement.close();
} catch (SQLException exception) {
while(result.next()){
Peminjaman peminjaman = new Peminjaman();
peminjaman.setId_pinjam(result.getInt("id_pinjam"));
peminjaman.setId_anggota(result.getString("id_anggota"));
peminjaman.setKode_buku(result.getString("kode_buku"));
peminjaman.setTgl_pinjam(result.getDate("tgl_pinjam"));
peminjaman.setTgl_batas_kembali(result.getDate("tgl_batas_kembali"));
peminjaman.setTgl_kembali(result.getDate("tgl_kembali"));
peminjaman.setDenda(result.getInt("denda"));
list.add(peminjaman);
}
connection.commit();
return list;
} catch (SQLException exception) {
try {
connection.rollback();
} catch (SQLException ex) {
}
throw new PeminjamanException(exception.getMessage());
Package perpus.koneksi
Package perpus.koneksi ini berfungsi sebagai koneksi ke basis data yang telah dibuat.
Sebelum membuat file-file java koneksi, import terlebih dahulu library “MySQL JDBC
- Klik Kanan Folder Libraries pada project perpus, lalu pilih Add Library. Jika belum
perpus.koneksi, lalu pilih New – Java Class. Buatlah 4 buah kelas masing-masing diberi nama
1. AdminKoneksi.java :
package perpus.koneksi;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import perpus.service.AdminDao;
import perpus.service.impl.AdminDaoImpl;
import java.sql.Connection;
import java.sql.SQLException;
Package perpus.model
Pada pemrograman MVC Package perpus.model ini berfungsi sebagai representasi data
Buat kelas java pada package perpus.model dengan cara klik kanan package
perpus.model, lalu pilih New – Java Class. Buatlah 4 buah java kelas masing-masing diberi
1. AdminModel.java :
package perpus.model;
2. AnggotaModel.java :
package perpus.model;
import perpus.koneksi.AnggotaKoneksi;
import perpus.entity.Anggota;
import perpus.error.AnggotaException;
import perpus.model.event.AnggotaListener;
import java.sql.SQLException;
import java.util.Date;
import perpus.service.AnggotaDao;
dao.insertAnggota(anggota);
fireOnInsert(anggota);
}
dao.updateAnggota(anggota);
fireOnUpdate(anggota);
}
dao.deleteAnggota(id_anggota);
fireOnDelete();
}
}
3. BukuModel.java :
package perpus.model;
import perpus.koneksi.BukuKoneksi;
import perpus.entity.Buku;
import perpus.error.BukuException;
import perpus.model.event.BukuListener;
import perpus.service.BukuDao;
import java.sql.SQLException;
import java.util.Date;
fireOnInsert(dao.getBuku(getKode_buku()));
}
dao.insertBuku(buku);
fireOnInsert(buku);
}
dao.updateBuku(buku);
fireOnUpdate(buku);
}
dao.updatePinjamBuku(getKode_buku());
}
dao.updatePengembalian(getKode_buku());
}
dao.deleteBuku(kode_buku);
4. PeminjamanModel.java :
package perpus.model;
import perpus.koneksi.PeminjamanKoneksi;
import perpus.entity.Peminjaman;
import perpus.error.PeminjamanException;
import perpus.model.event.PeminjamanListener;
import perpus.service.PeminjamanDao;
import java.sql.SQLException;
import java.util.Date;
dao.insertPeminjaman(peminjaman);
}
dao.updatePeminjaman(peminjaman);
fireOnUpdate(peminjaman);
}
dao.updatePengembalian(peminjaman);
}
dao.deletePeminjaman(id_pinjam);
fireOnDelete();
}
}
5. File dibawah ini merupakan file model untuk setting tabel grid pada Form View
masing-masing kelas:
TabelBukuModel.java :
package perpus.model;
import perpus.entity.Buku;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
@Override
public String getColumnName(int column) {
switch(column) {
case 0 : return "Kode Buku";
case 1 : return "Judul";
case 2 : return "Pengarang";
case 3 : return "Penerbit";
case 4 : return "Tgl.Entry Perpus";
case 5 : return "Jml. Buku";
case 6 : return "Jml. Diperpus";
case 7 : return "Jml. Dipinjam";
default: return null;
}
}
@Override
public int getRowCount() {
return list.size();
}
@Override
public int getColumnCount() {
return 8;
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
switch(columnIndex) {
case 0 : return list.get(rowIndex).getKode_buku();
case 1 : return list.get(rowIndex).getJudul_buku();
case 2 : return list.get(rowIndex).getPengarang();
case 3 : return list.get(rowIndex).getPenerbit();
case 4 : return list.get(rowIndex).getTgl_entry_perpus();
case 5 : return list.get(rowIndex).getJml_buku();
case 6 : return list.get(rowIndex).getJml_diperpus();
case 7 : return list.get(rowIndex).getJml_dipinjam();
default: return null;
}
}
}
Package perpus.model.event
Package perpus.model.event ini berfungsi sebagai deklarasi model data object. File ini
berisi file bertipe interface. Buat interface java pada package perpus.model.event dengan cara
klik kanan package perpus.model.event, lalu pilih New – Java Interface. Buatlah 3 buah
“PeminjamanListener”.
1. BukuListener.java :
package perpus.model.event;
import perpus.entity.Buku;
import perpus.model.BukuModel;
VIEW
dengan data yang ada pada basis data. Maka, pada pembahasan bab ini, akan dijabarkan
pembuatan form java yang akan dikategorikan kedalam package khusus yaitu view. Objek-
objek pada form akan dibantu oleh tools yang ada pada library UsuLibrary yang diciptakan
oleh Eko Khannedy seorang Java Programmer. UsuLibrary harus diimport dahulu kedalam
project atau bisa dengan copy paste biasa folder UsuLibrary pada windows explorer.
Selanjutnya buat terlebih dahulu package baru pada project bernama ”perpus.view”.
Form LoginAdminView
1. Klik kanan pada package perpus.view, lalu pilih New – JFrame From, lalu beri nama
kelas LoginAdminView.
package perpus.view;
import perpus.koneksi.AdminKoneksi;
import perpus.entity.Admin;
import perpus.error.AdminException;
import perpus.service.AdminDao;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
/**
* Creates new form Login
*/
public LoginAdminView() {
//super(parent, modal);
initComponents();
setTitle("Aplikasi Perpustakaan Berbasis MVC");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setLocationRelativeTo(null);
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
btnLogin.setText("Login");
btnLogin.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnLoginActionPerformed(evt);
}
});
toolbar1.setRollover(true);
label2.setText("Password");
label2.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
label3.setText("Username");
label3.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(toolbar1, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(panel1Layout.createSequentialGroup()
.addGap(121, 121, 121)
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.T
RAILING)
.addComponent(txtPassword,
javax.swing.GroupLayout.PREFERRED_SIZE, 159,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txtUsername,
javax.swing.GroupLayout.PREFERRED_SIZE, 159,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(119, Short.MAX_VALUE))
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.L
EADING)
.addGroup(panel1Layout.createSequentialGroup()
.addGap(166, 166, 166)
.addComponent(label3, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(164, Short.MAX_VALUE)))
);
panel1Layout.setVerticalGroup(
panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panel1Layout.createSequentialGroup()
.addComponent(toolbar1, javax.swing.GroupLayout.PREFERRED_SIZE,
48, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 50,
Short.MAX_VALUE)
.addComponent(txtUsername,
javax.swing.GroupLayout.PREFERRED_SIZE, 36,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(label2, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txtPassword,
javax.swing.GroupLayout.PREFERRED_SIZE, 34,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(btnLogin, javax.swing.GroupLayout.PREFERRED_SIZE,
37, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(42, 42, 42))
pack();
}// </editor-fold>
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code
(optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look
and feel.
* For details see
http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info :
javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(LoginAdminView.class.getName()).log(java.util.l
ogging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(LoginAdminView.class.getName()).log(java.util.l
ogging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(LoginAdminView.class.getName()).log(java.util.l
ogging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
Untuk menjalankan Form Login Admin sebagai form awal dari projek yang akan
dijalankan, dibutuhkan kelas java yang khusus bertugas sebagai Fungsi Utama atau Main
1. Klik kanan pada package “perpus”, lalu pilih New – Java Class, beri nama
MainProgram.
package perpus;
import perpus.view.LoginAdminView;
import javax.swing.SwingUtilities;
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
LoginAdminView petugas = null;
petugas = new LoginAdminView();
petugas.setVisible(true);
}
});
}
}
1. Klik kanan pada package perpus.view, lalu pilih New – JFrame From, lalu beri nama
kelas AdminView.
Label Tanggal
package perpus.view;
import perpus.koneksi.BukuKoneksi;
import perpus.entity.Buku;
import perpus.error.BukuException;
import perpus.error.AnggotaException;
import perpus.service.BukuDao;
import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.sql.SQLException;
//Membuat tanggal
Format formatter = new SimpleDateFormat("dd MMMM yyyy");
Date ftgl = new Date();
String tgl = formatter.format(ftgl);
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
toolbar1.setRollover(true);
label2.setText("| ");
label2.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
toolbar1.add(label2);
toolbar1.add(lblTgl);
btnAnggota.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/perpus/view/images/buku.png"))); //
NOI18N
btnAnggota.setText("Daftar Anggota");
btnAnggota.setToolTipText("Menu Data Anggota");
btnAnggota.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnAnggotaActionPerformed(evt);
}
});
btnPinjam.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/perpus/view/images/buku.png"))); //
NOI18N
btnPinjam.setText("Peminjaman");
btnPinjam.setToolTipText("Menu Peminjaman Buku");
btnPinjam.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnPinjamActionPerformed(evt);
}
});
btnKembali.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/perpus/view/images/buku.png"))); //
NOI18N
btnKembali.setText("Pengembalian");
btnKembali.setToolTipText("Menu Pengembalian Buku");
btnKembali.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnKembaliActionPerformed(evt);
btnBuku.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/perpus/view/images/buku.png"))); //
NOI18N
btnBuku.setText("Daftar Buku");
btnBuku.setToolTipText("Menu Data Buku");
btnBuku.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnBukuActionPerformed(evt);
}
});
lblBuku_baru.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
lblBuku_baru.setText("<html>");
lblBuku_baru.setVerticalAlignment(javax.swing.SwingConstants.TOP);
lblBuku_baru.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
lblBuku_baru.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);
lblBuku_favorit.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
lblBuku_favorit.setText("<html>");
lblBuku_favorit.setVerticalAlignment(javax.swing.SwingConstants.TOP);
lblBuku_favorit.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
lblBuku_favorit.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addGroup(panel1Layout.createSequentialGroup()
.addComponent(btnBuku, javax.swing.GroupLayout.PREFERRED_SIZE,
173, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(btnAnggota, javax.swing.GroupLayout.PREFERRED_SIZE,
173, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addComponent(label3, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(lblBuku_baru,
javax.swing.GroupLayout.PREFERRED_SIZE, 343,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addComponent(lblBuku_favorit)
.addGroup(panel1Layout.createSequentialGroup()
.addComponent(label4, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 288, Short.MAX_VALUE)))
.addGap(454, 454, 454))))
);
panel1Layout.setVerticalGroup(
panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panel1Layout.createSequentialGroup()
.addComponent(toolbar1, javax.swing.GroupLayout.PREFERRED_SIZE, 55,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELI
NE)
.addComponent(btnAnggota, javax.swing.GroupLayout.PREFERRED_SIZE, 36,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnPinjam, javax.swing.GroupLayout.PREFERRED_SIZE, 36,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnKembali, javax.swing.GroupLayout.PREFERRED_SIZE, 36,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnBuku, javax.swing.GroupLayout.PREFERRED_SIZE, 36,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(58, 58, 58)
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILI
NG)
.addGroup(panel1Layout.createSequentialGroup()
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELI
NE)
.addComponent(lblBuku_favorit,
javax.swing.GroupLayout.PREFERRED_SIZE, 270,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(lblBuku_baru,
javax.swing.GroupLayout.PREFERRED_SIZE, 270,
javax.swing.GroupLayout.PREFERRED_SIZE))))
.addGap(0, 179, Short.MAX_VALUE))
);
lblBuku_baru.getAccessibleContext().setAccessibleDescription("");
pack();
}// </editor-fold>
1. Klik kanan pada package perpus.view, lalu pilih New – JFrame From, lalu beri nama
kelas DataBukuView.
Desain form seperti gambar dibawah ini, dengan cara drag and drop objek yang
package perpus.view;
import perpus.controller.BukuController;
import perpus.koneksi.BukuKoneksi;
import perpus.entity.Buku;
import perpus.error.*;
import perpus.model.BukuModel;
import perpus.model.TabelBukuModel;
import perpus.model.event.BukuListener;
import perpus.service.BukuDao;
tblBuku.getSelectionModel().addListSelectionListener(this);
tblBuku.setModel(tabelModel);
tblBuku.getTableHeader().setReorderingAllowed(false);
tblBuku.getTableHeader().setFont(new Font("Segoe UI", Font.PLAIN, 14));
tblBuku.getTableHeader().setBackground(Color.CYAN);
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
toolbar1.setRollover(true);
label2.setText("Kode Buku");
label2.setFont(new java.awt.Font("Arial Black", 0, 14)); // NOI18N
label3.setText("Judul");
label3.setFont(new java.awt.Font("Arial Black", 0, 14)); // NOI18N
label4.setText("Pengarang");
label4.setFont(new java.awt.Font("Arial Black", 0, 14)); // NOI18N
label5.setText("Penerbit");
label5.setFont(new java.awt.Font("Arial Black", 0, 14)); // NOI18N
tblBuku.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"Title 1", "Title 2", "Title 3", "Title 4"
}
));
jScrollPane2.setViewportView(tblBuku);
label7.setText("Jml. Buku");
label7.setFont(new java.awt.Font("Arial Black", 0, 14)); // NOI18N
btnTambah.setText("Tambah");
btnTambah.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnTambahActionPerformed(evt);
}
});
btnUbah.setText("Ubah");
btnUbah.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnUbahActionPerformed(evt);
}
});
btnHapus.setText("Hapus");
btnHapus.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnBatal.setText("Batal");
btnBatal.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnBatalActionPerformed(evt);
}
});
btnKeluar.setText("Keluar");
btnKeluar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnKeluarActionPerformed(evt);
}
});
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addGroup(panel1Layout.createSequentialGroup()
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addGroup(panel1Layout.createSequentialGroup()
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addComponent(label2,
javax.swing.GroupLayout.PREFERRED_SIZE, 107,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(label5,
javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(label3,
javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(label4,
javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addComponent(txtJml_buku,
javax.swing.GroupLayout.PREFERRED_SIZE, 153,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txtJudul_buku,
javax.swing.GroupLayout.PREFERRED_SIZE, 411,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txtKode_buku,
javax.swing.GroupLayout.PREFERRED_SIZE, 99,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILI
NG, false)
.addComponent(txtPenerbit,
javax.swing.GroupLayout.Alignment.LEADING,
javax.swing.GroupLayout.DEFAULT_SIZE, 345, Short.MAX_VALUE)
.addComponent(txtPengarang,
javax.swing.GroupLayout.Alignment.LEADING,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,
111, Short.MAX_VALUE)
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addComponent(btnUbah,
javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.PREFERRED_SIZE, 178,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnKeluar,
javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.PREFERRED_SIZE, 178,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnTambah,
javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.PREFERRED_SIZE, 178,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnHapus,
javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.PREFERRED_SIZE, 178,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addComponent(label2, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELI
NE)
.addComponent(txtKode_buku,
javax.swing.GroupLayout.PREFERRED_SIZE, 40,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnTambah, javax.swing.GroupLayout.PREFERRED_SIZE,
33, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELI
NE)
.addComponent(txtJudul_buku, javax.swing.GroupLayout.PREFERRED_SIZE,
39, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(label3, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnUbah, javax.swing.GroupLayout.PREFERRED_SIZE, 32,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELI
NE)
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addGroup(panel1Layout.createSequentialGroup()
.addGap(21, 21, 21)
.addComponent(label5, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(panel1Layout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELI
NE)
.addComponent(txtPenerbit,
javax.swing.GroupLayout.PREFERRED_SIZE, 45,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnBatal, javax.swing.GroupLayout.PREFERRED_SIZE,
34, javax.swing.GroupLayout.PREFERRED_SIZE))))
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addGroup(panel1Layout.createSequentialGroup()
.addComponent(label10, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnKeluar, javax.swing.GroupLayout.PREFERRED_SIZE,
34, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(panel1Layout.createSequentialGroup()
.addGap(23, 23, 23)
.addComponent(label7, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(panel1Layout.createSequentialGroup()
.addGap(11, 11, 11)
.addComponent(txtJml_buku, javax.swing.GroupLayout.PREFERRED_SIZE,
44, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGap(18, 18, 18)
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 233,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(38, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
@Override
public void onChange(BukuModel model) {
txtKode_buku.setText(model.getKode_buku());
txtJudul_buku.setText(model.getJudul_buku());
txtPengarang.setText(model.getPengarang());
txtPenerbit.setText(model.getPenerbit());
txtJml_buku.setText(model.getJml_buku()+ "");//To change body of generated
methods, choose Tools | Templates.
@Override
public void onInsert(Buku anggota) {
tabelModel.add(anggota); //To change body of generated methods, choose Tools |
Templates.
}
@Override
public void onUpdate(Buku anggota) {
int index = tblBuku.getSelectedRow();
tabelModel.set(index, anggota); //To change body of generated methods, choose Tools |
Templates.
}
@Override
public void valueChanged(ListSelectionEvent lse) {
try {
Buku model;
model = tabelModel.get(tblBuku.getSelectedRow());
txtKode_buku.setText(model.getKode_buku());
txtJudul_buku.setText(model.getJudul_buku());
txtPengarang.setText(model.getPengarang());
txtPenerbit.setText(model.getPenerbit());
txtJml_buku.setText(model.getJml_buku()+ "");
} catch (IndexOutOfBoundsException exception) {
} //To change body of generated methods, choose Tools | Templates.
}
}
Tampilan Running pada Form Data Buku :
Buat Form Anggota untuk package perpus.view, Contoh pembuatan Form dan Kode
program Lihat Form Data Buku.
Tampilan Program Running pada Form Data Anggota :
CONTROLLER
Tahap terakhir dari struktur kode pemrograman berbasis MVC adalah menuangkan
kode program dan memasukkannya kedalam bagian “controller” atau penghubung antara
bagian view dengan model dan basis data. Selanjutnya buat terlebih dahulu package baru pada
AnggotaController
1. Klik kanan pada package perpus.controller, lalu pilih New – Java Class, lalu beri nama
kelas AnggotaController.
package perpus.controller;
import perpus.model.AnggotaModel;
import perpus.view.DataAnggotaView;
import java.awt.HeadlessException;
import java.sql.SQLException;
import java.util.Date;
import javax.swing.JOptionPane;
import perpus.error.AnggotaException;
if (id_anggota.trim().equals("")) {
JOptionPane.showMessageDialog(view, "ID Anggota Belum Terisi!!!");
} else if (id_anggota.length() > 6) {
JOptionPane.showMessageDialog(view, "ID Anggota tidak boleh lebih dari 6
karakter");
} else if (nama_anggota.trim().equals("")) {
JOptionPane.showMessageDialog(view, "Nama Anggota Belum Terisi!!!");
} else if (nama_anggota.length() > 35) {
JOptionPane.showMessageDialog(view, "Nama Anggota tidak boleh lebih dari
35 karakter");
} else if (alamat.trim().equals("")) {
JOptionPane.showMessageDialog(view, "Alamat Anggota Belum Terisi!!!");
} else if (alamat.length() > 75) {
JOptionPane.showMessageDialog(view, "Alamat Anggota tidak boleh lebih dari
75 karakter");
} else if (no_telp.length() > 18) {
JOptionPane.showMessageDialog(view, "Nomor no_telp tidak boleh lebih dari
18 digit");
} else if (!email.contains("@") || !email.contains(".")) {
JOptionPane.showMessageDialog(view, "Email Tidak Valid!!!");
} else if (email.length() > 25) {
JOptionPane.showMessageDialog(view, "Email tidak boleh lebih dari 25
karakter");
} else {
model.setId_anggota(id_anggota);
model.setTgl_daftar(tgl_daftar);
model.setNama_anggota(nama_anggota);
model.setAlamat(alamat);
model.setEmail(email);
model.setNo_telp(no_telp);
try {
model.insertAnggota();
JOptionPane.showMessageDialog(view, "Data Anggota Berhasil Tersimpan");
model.resetAnggota();
} catch (Throwable throwable) {
JOptionPane.showMessageDialog(view, new Object[]{
"Terjadi Kesalahan Program !!!",
throwable.getMessage()});
}
}
}
if (view.gettblAnggota().getSelectedRowCount() == 0) {
if (id_anggota.trim().equals("")) {
JOptionPane.showMessageDialog(view, "ID Anggota Belum Terisi!!!");
} else if (id_anggota.length() > 6) {
JOptionPane.showMessageDialog(view, "ID Anggota tidak boleh lebih dari 6
karakter");
} else if (nama_anggota.trim().equals("")) {
JOptionPane.showMessageDialog(view, "Nama Anggota Belum Terisi!!!");
} else if (nama_anggota.length() > 35) {
JOptionPane.showMessageDialog(view, "Nama Anggota tidak boleh lebih dari
35 karakter");
} else if (alamat.trim().equals("")) {
JOptionPane.showMessageDialog(view, "Alamat Anggota Belum Terisi!!!");
} else if (alamat.length() > 75) {
JOptionPane.showMessageDialog(view, "Alamat Anggota tidak boleh lebih dari
75 karakter");
} else if (no_telp.length() > 18) {
JOptionPane.showMessageDialog(view, "Nomor no_telp tidak boleh lebih dari
18 digit");
} else if (!email.contains("@") || !email.contains(".")) {
JOptionPane.showMessageDialog(view, "Email Tidak Valid!!!");
} else if (email.length() > 25) {
JOptionPane.showMessageDialog(view, "Email tidak boleh lebih dari 25
karakter");
} else {
model.setId_anggota(id_anggota);
model.setNama_anggota(nama_anggota);
model.setAlamat(alamat);
model.setEmail(email);
model.setNo_telp(no_telp);
try {
model.updateAnggota();
JOptionPane.showMessageDialog(view, "Data Anggota Berhasil
Terupdate");
model.resetAnggota();
} catch (SQLException | AnggotaException | HeadlessException throwable) {
JOptionPane.showMessageDialog(view, new Object[]{
"Terjadi Kesalahan Program !!!",
throwable.getMessage()});
}
}
}
if (view.gettblAnggota().getSelectedRowCount() == 0) {
JOptionPane.showMessageDialog(view, "Pilih Record Yang Akan Dihapus");
} else {
if (JOptionPane.showConfirmDialog(view, "Anda yakin ingin menghapus data
Anggota ini?") == JOptionPane.OK_OPTION) {
String id_anggota = view.gettxtId_anggota().getText();
model.setId_anggota(id_anggota);
try {
model.deleteAnggota();
JOptionPane.showMessageDialog(view, "Data Anggota Berhasil
Terhapus!!!");
model.resetAnggota();
} catch (Throwable throwable) {
JOptionPane.showMessageDialog(view, new Object[]{
"Terjadi Kesalahan Program !!!",
throwable.getMessage()});
}
}
}
}
BukuController
1. Klik kanan pada package perpus.controller, lalu pilih New – Java Class, lalu beri nama
kelas BukuController.
package perpus.controller;
import perpus.model.BukuModel;
import perpus.view.*;
import perpus.error.BukuException;
import java.sql.SQLException;
import java.util.Date;
import javax.swing.JTable;
import javax.swing.JOptionPane;
if (Kode_buku.trim().equals("")) {
JOptionPane.showMessageDialog(view, "Kode Buku masih kosong");
} else if (Kode_buku.length() > 20) {
JOptionPane.showMessageDialog(view, "Kode Buku tidak boleh lebih dari 10
karakter");
} else {
model.setKode_buku(Kode_buku);
try {
model.getBuku();
JOptionPane.showMessageDialog(view, "Data Buku Tersimpan");
model.resetPeminjaman();
} catch (Throwable throwable) {
JOptionPane.showMessageDialog(view, new Object[]{
"Terjadi Kesalahan Program",
throwable.getMessage()});
}
}
}
if (kode_buku.trim().equals("")) {
JOptionPane.showMessageDialog(view, "Kode Buku Belum Terisi!!!");
} else if (kode_buku.length() > 10) {
JOptionPane.showMessageDialog(view, "Kode Buku tidak boleh lebih dari 10
karakter");
} else if (judul_buku.trim().equals("")) {
if (view.gettblBuku().getSelectedRowCount() == 0) {
JOptionPane.showMessageDialog(view, "Pilih Record Yang Akan Diubah");
} else {
if (kode_buku.trim().equals("")) {
JOptionPane.showMessageDialog(view, "Kode Buku Belum Terisi!!!");
} else if (kode_buku.length() > 10) {
JOptionPane.showMessageDialog(view, "Kode Buku tidak boleh lebih dari 10
karakter");
} else if (judul_buku.trim().equals("")) {
JOptionPane.showMessageDialog(view, "Judul Buku Belum Terisi!!!");
} else if (judul_buku.length() > 45) {
JOptionPane.showMessageDialog(view, "Judul Buku tidak boleh lebih dari 45
karakter");
} else if (pengarang.trim().equals("")) {
JOptionPane.showMessageDialog(view, "Pengarang Belum Terisi!!!");
} else if (pengarang.length() > 35) {
JOptionPane.showMessageDialog(view, "Pengarang tidak boleh lebih dari 35
karakter");
} else if (penerbit.trim().equals("")) {
JOptionPane.showMessageDialog(view, "Penerbit Belum Terisi!!!");
} else if (penerbit.length() > 45) {
JOptionPane.showMessageDialog(view, "Penerbit tidak boleh lebih dari 45 karakter");
} else if (String.valueOf(jml_buku).trim().equals("")) {
JOptionPane.showMessageDialog(view, "Jumlah Buku Belum Terisi!!!");
} else if (String.valueOf(jml_buku).length() > 4) {
JOptionPane.showMessageDialog(view, "Jumlah Buku tidak boleh lebih dari 4 digit");
} else {
model.setKode_buku(kode_buku);
model.setJudul_buku(judul_buku);
model.setPengarang(pengarang);
model.setPenerbit(penerbit);
model.setTgl_entry_perpus(tgl_entry_perpus);
model.setJml_buku(jml_buku);
model.setJml_diperpus(jml_diperpus);
try {
model.updateBuku();
JOptionPane.showMessageDialog(view, "Data Buku Berhasil Terupdate!!!");
model.resetBuku();
} catch (Throwable throwable) {
if (rowCounts == 0) {
JOptionPane.showMessageDialog(view, "Belum Ada Buku Yang Tersimpan");
} else if (id_anggota.trim().equals("")) {
JOptionPane.showMessageDialog(view, "ID Anggota Belum Terisi!!!");
} else if (id_anggota.length() > 6) {
JOptionPane.showMessageDialog(view, "ID Anggota tidak boleh lebih dari 6
karakter");
} else {
for (int i = 0; i < tblTransaksi.getRowCount(); i++) {
String Kode_buku = (String) tblTransaksi.getValueAt(i, 0);
model.setKode_buku(Kode_buku);
try {
model.updatePinjamBuku();
} catch (Throwable throwable) {
JOptionPane.showMessageDialog(view, new Object[]{
"Terjadi Kesalahan Program",
throwable.getMessage()});
}
}
JOptionPane.showMessageDialog(view, "Data Buku Berhasil Terupdate");
}
}
Berikut ini adalah review gambaran dari projek perpus yang telah dibuat berserta
package-package yang ada dari Bab I hingga Bab VII :
1. Klik kanan pada package perpus.view, lalu pilih New – JFrame From, lalu beri nama
kelas PeminjamanView.
Desain form seperti gambar dibawah ini, dengan cara drag and drop objek yang dibutuhkan
Secara default objek JDateChooser belum tersedia pada Editor Netbeans, maka lakukan
1. Copy library jcalendar yang telah dimiliki kedalam folder Libraries projek perpus.
2. Dalam kondisi Form Peminjaman sedang terbuka, Klik kanan kotak objek Palette,
3. Pada Palette Manager, pilih “Add from JAR”, kemudian cari library jcalendar yang
package perpus.view;
import com.toedter.calendar.JDateChooser;
import perpus.controller.BukuController;
import perpus.controller.PinjamController;
import perpus.koneksi.BukuKoneksi;
import perpus.entity.Buku;
import perpus.error.BukuException;
import perpus.model.BukuModel;
import perpus.model.PeminjamanModel;
import perpus.service.BukuDao;
import perpus.view.usu.TextBox;
import java.awt.Color;
import java.awt.Font;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
@Override
public boolean isCellEditable(int row, int column) {
//all cells false
return false;
/**
* Creates new form PeminjamanKasirView
*/
public PeminjamanView() {
initComponents();
setTitle("Form Peminjaman Aplikasi Perpustakaan");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setExtendedState(MAXIMIZED_BOTH);
tblTransaksi.setModel(tableModel);
tblTransaksi.getTableHeader().setReorderingAllowed(false);
tblTransaksi.getTableHeader().setFont(new Font("Segoe UI", Font.PLAIN, 16));
tblTransaksi.getTableHeader().setBackground(Color.CYAN);
}
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
toolbar1.setRollover(true);
label2.setText("ID. Anggota");
label2.setFont(new java.awt.Font("Arial Black", 0, 14)); // NOI18N
label3.setText("Kode Buku");
label3.setFont(new java.awt.Font("Arial Black", 0, 14)); // NOI18N
txtKode_buku.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
txtKode_bukuActionPerformed(evt);
}
});
tblTransaksi.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"Title 1", "Title 2", "Title 3", "Title 4"
btnSimpan.setText("Simpan");
btnSimpan.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnSimpanActionPerformed(evt);
}
});
btnBatal.setText("Batal");
btnBatal.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnBatalActionPerformed(evt);
}
});
BtnKeluar.setText("Keluar");
BtnKeluar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
BtnKeluarActionPerformed(evt);
}
});
btnTambah.setText("Tambah");
btnTambah.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnTambahActionPerformed(evt);
}
});
label4.setText("Tgl. Pengembalian");
label4.setFont(new java.awt.Font("Arial Black", 0, 14)); // NOI18N
btnHapus.setText("Hapus");
btnHapus.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnHapusActionPerformed(evt);
}
});
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addGroup(panel1Layout.createSequentialGroup()
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addComponent(label2, javax.swing.GroupLayout.PREFERRED_SIZE,
107, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(label3, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G, false)
.addComponent(txtId_anggota,
javax.swing.GroupLayout.DEFAULT_SIZE, 159, Short.MAX_VALUE)
.addComponent(txtKode_buku,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE))
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addGroup(panel1Layout.createSequentialGroup()
.addGap(154, 154, 154)
.addComponent(label4,
javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(26, 26, 26)
.addComponent(dtTgl_kembali,
javax.swing.GroupLayout.PREFERRED_SIZE, 181,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(panel1Layout.createSequentialGroup()
.addGap(31, 31, 31)
.addComponent(btnTambah,
javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
panel1Layout.createSequentialGroup()
.addComponent(btnSimpan,
javax.swing.GroupLayout.PREFERRED_SIZE, 112,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(btnBatal, javax.swing.GroupLayout.PREFERRED_SIZE,
112, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(BtnKeluar, javax.swing.GroupLayout.PREFERRED_SIZE,
112, javax.swing.GroupLayout.PREFERRED_SIZE))))
.addGap(0, 124, Short.MAX_VALUE))
);
panel1Layout.setVerticalGroup(
panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panel1Layout.createSequentialGroup()
.addComponent(toolbar1, javax.swing.GroupLayout.PREFERRED_SIZE, 55,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addGroup(panel1Layout.createSequentialGroup()
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addComponent(label2, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txtId_anggota,
javax.swing.GroupLayout.PREFERRED_SIZE, 40,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILI
NG)
.addComponent(dtTgl_kembali,
javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(label4, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addComponent(label3, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELI
NE)
.addComponent(btnSimpan, javax.swing.GroupLayout.PREFERRED_SIZE, 39,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnBatal, javax.swing.GroupLayout.PREFERRED_SIZE, 37,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(BtnKeluar, javax.swing.GroupLayout.PREFERRED_SIZE, 38,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnHapus, javax.swing.GroupLayout.PREFERRED_SIZE, 39,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(79, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
Agar Form Peminjaman dapat Running, buat terlebih dahulu Controller untuk
Peminjaman. Buat kelas java baru pada package “controller” lalu beri nama
“PinjamController”.
package perpus.controller;
import java.sql.SQLException;
import perpus.model.PeminjamanModel;
import perpus.view.PengembalianView;
import perpus.view.PeminjamanView;
import java.util.Date;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import perpus.error.PeminjamanException;
public class PinjamController {
private PeminjamanModel model;
if (id_anggota.trim().equals("")) {
JOptionPane.showMessageDialog(view, "ID Anggota Belum Terisi!!!");
} else if (id_anggota.length() > 6) {
JOptionPane.showMessageDialog(view, "ID Anggota tidak boleh lebih dari 6
karakter");
} else if (tgl_batas_kembali.compareTo(new Date()) <= 0) {
JOptionPane.showMessageDialog(view, "Tanggal Pengembalian tidak boleh tanggal
yang telah lalu");
} else if (tblTransaksi.getRowCount() == 0) {
JOptionPane.showMessageDialog(view, "Belum Ada Buku Yang Dipilih!!!");
} else {
for (int i = 0; i < tblTransaksi.getRowCount(); i++) {
model.setTgl_pinjam(tgl_pinjam);
model.setTgl_batas_kembali(tgl_batas_kembali);
model.setId_anggota(id_anggota);
model.setKode_buku((String) tblTransaksi.getValueAt(i, 0));
model.setDenda(denda);
try {
model.insertPeminjaman();
} catch (Throwable throwable) {
JOptionPane.showMessageDialog(view, new Object[]{
"Terjadi Kesalahan Pada Program!!!",
throwable.getMessage()});
}
}
return true;
}
return false;
}
if (view.gettxtDenda().getText().equals("")) {
JOptionPane.showMessageDialog(view, "Isikan Denda dengan nilai 0 jika
pengembalian tepat waktu");
} else {
model.setId_pinjam((Integer) tabelPeminjaman.getValueAt(0, 0));
model.setTgl_kembali(tgl_kembali);
model.setDenda(denda);
try {
model.updatePengembalian();
} catch (SQLException | PeminjamanException throwable) {
JOptionPane.showMessageDialog(view, new Object[]{
"Terjadi Kesalahan Pada Program",
try {
model.updatePengembalian();
} catch (Throwable throwable) {
JOptionPane.showMessageDialog(view, new Object[]{
"Terjadi Kesalahan Pada Program",
throwable.getMessage()});
}
}
JOptionPane.showMessageDialog(view, "Transaksi pengembalian berhasil
disimpan");
}
}
}
2. Klik kanan pada package perpus.view, lalu pilih New – JFrame From, lalu beri nama
kelas PengembalianView.
Desain form seperti gambar dibawah ini, dengan cara drag and drop objek yang dibutuhkan
package perpus.view;
import perpus.controller.BukuController;
import perpus.controller.PinjamController;
import perpus.koneksi.PeminjamanKoneksi;
import perpus.entity.Peminjaman;
import perpus.error.PeminjamanException;
import perpus.model.BukuModel;
import perpus.model.PeminjamanModel;
import perpus.model.TabelPengembalianModel;
import perpus.model.event.PeminjamanListener;
import perpus.service.PeminjamanDao;
import perpus.view.usu.TextBox;
import java.awt.Color;
import java.awt.Font;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.event.ListSelectionEvent;
/**
* Creates new form PeminjamanKasirView
*/
public PengembalianView() {
tableModel = new TabelPengembalianModel();
initComponents();
setTitle("Form Pengembalian Aplikasi Perpustakaan");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setExtendedState(MAXIMIZED_BOTH);
tblTransaksi.getSelectionModel().addListSelectionListener(this);
tblTransaksi.setModel(tableModel);
tblTransaksi.getTableHeader().setReorderingAllowed(false);
tblTransaksi.getTableHeader().setFont(new Font("Segoe UI", Font.PLAIN, 16));
tblTransaksi.getTableHeader().setBackground(Color.CYAN);
}
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
toolbar1.setRollover(true);
label2.setText("ID. Anggota");
label2.setFont(new java.awt.Font("Arial Black", 0, 14)); // NOI18N
label3.setText("Denda");
label3.setFont(new java.awt.Font("Arial Black", 0, 14)); // NOI18N
txtId_anggota.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
txtId_anggotaActionPerformed(evt);
}
});
txtDenda.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
txtDendaActionPerformed(evt);
}
});
tblTransaksi.setModel(new javax.swing.table.DefaultTableModel(
btnSimpan.setText("Simpan");
btnSimpan.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnSimpanActionPerformed(evt);
}
});
btnBatal.setText("Batal");
btnBatal.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnBatalActionPerformed(evt);
}
});
BtnKeluar.setText("Keluar");
BtnKeluar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
BtnKeluarActionPerformed(evt);
}
});
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addGroup(panel1Layout.createSequentialGroup()
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addComponent(label2, javax.swing.GroupLayout.PREFERRED_SIZE,
107, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(label3, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G, false)
.addComponent(txtId_anggota,
javax.swing.GroupLayout.DEFAULT_SIZE, 159, Short.MAX_VALUE)
.addComponent(txtDenda, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGap(31, 31, 31)
.addComponent(btnLihat, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(295, 295, 295))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
panel1Layout.createSequentialGroup()
.addComponent(btnSimpan,
javax.swing.GroupLayout.PREFERRED_SIZE, 112,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(btnBatal, javax.swing.GroupLayout.PREFERRED_SIZE,
112, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(BtnKeluar, javax.swing.GroupLayout.PREFERRED_SIZE,
112, javax.swing.GroupLayout.PREFERRED_SIZE))))
.addGap(0, 64, Short.MAX_VALUE))
);
panel1Layout.setVerticalGroup(
panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panel1Layout.createSequentialGroup()
.addComponent(toolbar1, javax.swing.GroupLayout.PREFERRED_SIZE, 55,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addGroup(panel1Layout.createSequentialGroup()
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addComponent(label2, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txtId_anggota,
javax.swing.GroupLayout.PREFERRED_SIZE, 40,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addComponent(label3, javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txtDenda, javax.swing.GroupLayout.PREFERRED_SIZE,
39, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addComponent(btnLihat, javax.swing.GroupLayout.PREFERRED_SIZE, 60,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 188,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(26, 26, 26)
.addGroup(panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELI
NE)
.addComponent(btnSimpan, javax.swing.GroupLayout.PREFERRED_SIZE, 39,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnBatal, javax.swing.GroupLayout.PREFERRED_SIZE, 37,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(BtnKeluar, javax.swing.GroupLayout.PREFERRED_SIZE, 38,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(79, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
@Override
public void onChange(PeminjamanModel model) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of
generated methods, choose Tools | Templates.
}
@Override
public void onInsert(Peminjaman peminjaman) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of
generated methods, choose Tools | Templates.
}
@Override
public void onUpdate(Peminjaman peminjaman) {
int index = tblTransaksi.getSelectedRow();
tableModel.set(index, peminjaman); //To change body of generated methods, choose
Tools | Templates.
}
@Override
public void valueChanged(ListSelectionEvent lse) {
Peminjaman model = tableModel.get(tblTransaksi.getSelectedRow());
txtDenda.setText(model.getDenda() + ""); //To change body of generated methods,
choose Tools | Templates.
}
dari pengembangan aplikasi adalah melakukan pengujian. Karena projek pada Modul
Praktikum ini masih terbilang sederhana, maka pengujian yang sesuai adalah menggunakan
Blackbox Testing adalah tipe pengujian yang memperlakukan perangkat lunak yang
tidak diketahui kinerja internalnya. Sehingga para tester memandang perangkat lunak seperti
layaknya sebuah “kotak hitam” yang tidak penting dilihat isinya, tapi cukup dikenai proses
1. Penguji tidak harus dari seseorang yang memiliki kemampuan teknis di bidang
pemrograan.
2. Kesalahan dari perangkat lunak ataupun bug seringkali ditemukan oleh komponen
3. Hasil dari blackbox testing dapat memperjelas kontradiksi ataupun keracunan yang
Beberapa teknik yang biasa digunakan untuk merancang pengujian black box:
1. Equivalence Partitioning
Dalam teknik ini, pengujian akan melibatkan pembagian nilai input kedalam bagian
Dalam teknik ini, pengujian akan melibatkan penentuan-penentuan nilai input dan
memilih beberapa nilai dari batasan-batasan tersebut baik luar maupun dalam dari
Dalam teknik ini, pengujian akan melibatkan identifikasi kondisi input (percabangan
ataupun perulangan)
Tabel Skenario dan Hasil Pengujian Equivalence Partitioning Form Login Admin
Hasil yang Skenario Hasil
No Halaman Test Case
diharapkan Pengujian
1 Halaman login Menguji input data test Berhasil Memasuka Inputan valid
Admin username dan masuk n username baik berupa
password, dengan kedalam dan huruf atau
karakter huruf dan halaman password angka untuk
angka sesuai dengan utama dengan login admin
data yang ada pada aplikasi huruf
basis data admin maupun
angka yang
sesuai
dengan data
pada basis
data
2 Halaman login Menguji input data test Aplikasi Memasuka Inputan tidak
Admin username dan menahan n username valid baik
password, dengan hasil input dan berupa huruf
karakter huruf dan dan password atau angka
angka tidak sesuai menolak dengan untuk login
dengan data yang ada untuk huruf admin
pada basis data masuk maupun
kedalam angka yang
halaman tidak sesuai
utama dengan data
Skenario dan Hasil Pengujian Boundary Value Analisys Form Data Anggota
Skenario dan Hasil Pengujian Cause Effect Graphic Form Data Anggota
(resume berisi analisa kekurangan dan kelebihan dari projek aplikasi perpustakaan, dan