Nama : ALFI HIDAYAT
Kelas : SI 2018 D
Tulisan ini dibuat berdasarkan tugas matakuliah Bahasa Pemrograman 2, tugasnya sebagai berikut :
Gunakan database sebelumnya Buat Form Login lengkap dengan penanganan kesalahan dan pembagian hak akses (Admin, Kasir dan Pemilik)
Tugas BP2
Jawaban ditulis di Site / Blog yang anda punya dan linknya tulis d eclass.
Untuk membuat login form dan memiliki hak akses yang berbeda, kuncinya pada database user yang akan dibuat. Adapun langkah pembuatanya sebagai berikut :
Aplikasi / Software yang diperlukan : Java Netbeans dan Mysql.
Langkah pembuatan projectnya :
- Pertama buka aplikasi XAMPP lalu jalankan apache dan mysql, disini saya menggunakan aplikasi sebagai localhostnya atau tempat penyimpanan databsenya.

- Selanjutnya jalankan aplikasi netbeans dan buat project baru, saya memberi nama project tersebut dengan app_alfi, didalam project tersebut kita buat 2 package yaitu Class dan Form, didalam package Class itu berisi java class (koneksi), dan didalam package Form berisi java form (frLogin, frHome) sebenarnya bisa menambahkan form lebih banyak lagi sesuai kebutuhan, tetapi untuk sementara saya hanya buatkan dua form agar tidak terlalu panjang / banyak.
- Jangan lupa untuk menambahkan jdbc driver kedalam libraries. Lebih jelasnya bisa lihat gambar berikut :

- Kemudain langkah pembuatan class koneksi, Klik kanan pada package Class pilih New pilih Java Class masukan nama class nya yaitu Koneksi lalu klik Finish. Berikut gambar dari langkah diatas dan script untuk class koneksi :

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package Class;
import java.sql.*;
/**
*
* @author hidayatalfi
*/
public class Koneksi {
public Koneksi() { // merupakan construktor (ingat, nama construktor harus sama dengan nama Class
}
public Connection getConnection() throws SQLException {
Connection cn;
try {
String server = "jdbc:mysql://localhost/db_si2018d";
String driver = "com.mysql.jdbc.Driver";
Class.forName(driver);
cn = DriverManager.getConnection (server, "root","");
return cn;
} catch (SQLException se) {
System.out.println(se.toString());
return null;
} catch (Exception ex) {
System.out.println(ex.toString());
return null;
}
}
}
- Setelah membuat class koneksi, kemudian buat form login dengan JForm, pallete yang saya gunakan : JPanel, JLabel, JTextField, JPasswordField, JButton. Berikut tampilan form dan source code formnya :

package Form;
import Class.Koneksi;
import Form.frHome;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Date;
import java.text.SimpleDateFormat;
import javax.swing.JOptionPane;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
/**
*
* @author hiday
*/
public class frLogin extends javax.swing.JFrame {
public static String userakses;
private Dimension dmn = Toolkit.getDefaultToolkit().getScreenSize();
public frLogin() {
initComponents();
//kodeLogin = login;
this.setLocation(dmn.width/2-this.getWidth()/2,dmn.height/2-this.getHeight()/2);
this.setTitle("Login");
}
/**
* 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() {
jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jPanel2 = new javax.swing.JPanel();
jLabel3 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
TxtUser = new javax.swing.JTextField();
TxtPassword = new javax.swing.JPasswordField();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jLabel5 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jPanel1.setBackground(new java.awt.Color(0, 153, 153));
jLabel1.setBackground(new java.awt.Color(255, 255, 255));
jLabel1.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
jLabel1.setForeground(new java.awt.Color(255, 255, 255));
jLabel1.setText("Silahkan Masukan Data Login Anda");
jLabel2.setBackground(new java.awt.Color(255, 255, 255));
jLabel2.setFont(new java.awt.Font("Tahoma", 1, 24)); // NOI18N
jLabel2.setForeground(new java.awt.Color(255, 255, 255));
jLabel2.setText("LOGIN PAGE");
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addContainerGap(114, Short.MAX_VALUE)
.addComponent(jLabel1)
.addGap(99, 99, 99))
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addContainerGap(133, Short.MAX_VALUE)
.addComponent(jLabel2)
.addGap(114, 114, 114)))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addContainerGap(54, Short.MAX_VALUE)
.addComponent(jLabel1)
.addGap(21, 21, 21))
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(21, 21, 21)
.addComponent(jLabel2)
.addContainerGap(40, Short.MAX_VALUE)))
);
jPanel2.setBackground(new java.awt.Color(204, 255, 204));
jLabel3.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
jLabel3.setText("Username :");
jLabel4.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
jLabel4.setText("Password :");
TxtUser.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
TxtUserActionPerformed(evt);
}
});
jButton1.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
jButton1.setText("Login");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jButton1.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
jButton1KeyPressed(evt);
}
});
jButton2.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
jButton2.setText("Exit");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
jLabel5.setText("* Aplikasi ini dibuat oleh Alfi Hidayat");
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGap(41, 41, 41)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel3)
.addComponent(jLabel4))
.addGap(30, 30, 30)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addComponent(jButton1)
.addGap(18, 18, 18)
.addComponent(jButton2))
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(TxtUser)
.addComponent(TxtPassword, javax.swing.GroupLayout.DEFAULT_SIZE, 222, Short.MAX_VALUE))))
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel5)))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel3)
.addComponent(TxtUser, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel4)
.addComponent(TxtPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton1)
.addComponent(jButton2))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 16, Short.MAX_VALUE)
.addComponent(jLabel5))
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
private void TxtUserActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
dispose();
this.setVisible(false);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
System.exit(0); // TODO add your handling code here:
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
aksi_login(); // TODO add your handling code here:
}
private void jButton1KeyPressed(java.awt.event.KeyEvent evt) {
aksi_login(); // TODO add your handling code here:
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new frLogin().setVisible(true);
//new FrmLogin(kodelogin).setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JPasswordField TxtPassword;
private javax.swing.JTextField TxtUser;
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
// End of variables declaration
private void aksi_login(){
try{
String akses = "";
Connection _Cnn;
Koneksi getCnn = new Koneksi();
_Cnn = null;
_Cnn = getCnn.getConnection();
String sql = " SELECT id_user,pass,lev_akses " +
" FROM pos_user " +
" WHERE id_user='"+TxtUser.getText().replaceAll("'", "")+"' " +
" AND pass = '"+TxtPassword.getText().replaceAll("'", "")+"'";
Statement stat = _Cnn.createStatement();
ResultSet res = stat.executeQuery(sql);
while(res.next()){
userakses = res.getString(3);
akses = "-";
this.setVisible(false);
frHome x = new frHome(userakses);
x.setVisible(true);
}
if(akses.equals("")){
JOptionPane.showMessageDialog(this, "Periksa Kembali");
}
}catch(Exception ex){}
}
}
- Dan Selanjutnya mebuat form Home atau menu utama, didalam form ini ada beberapa menu dan menu tersebut bisa diakses berdasarkan level pengguna, ada tiga level pengguna yang saya masukan diantaranya admin, kasir, pemilik. Ketiga pengguna tersebut memiliki hak akses yang berbeda sehingga nanti didalam aplikasi tersebut ada menu yang tidak bisa diklik.. Berikut tampilan dari form home dan sourcodenya :



package Form;
import Class.Koneksi;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.sql.Connection;
import static javax.swing.JFrame.EXIT_ON_CLOSE;
/**
*
* @author hiday
*/
public class frHome extends javax.swing.JFrame {
Connection _Cnn;
Koneksi getCnn = new Koneksi();
String _User;
private Dimension dimensi = Toolkit.getDefaultToolkit().getScreenSize();
public frHome(String userlogin) {
initComponents();
//_User = userlogin;
this.setExtendedState(this.getExtendedState() | this.MAXIMIZED_BOTH);
switch (userlogin) {
case "Administrator":
loginadmin();
break;
case "Pemilik":
loginpemilik();
break;
case "Kasir":
loginkasir();
break;
}
}
/**
* 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() {
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
btLogout = new javax.swing.JButton();
jLabel4 = new javax.swing.JLabel();
jMenuBar1 = new javax.swing.JMenuBar();
mnData = new javax.swing.JMenu();
mnKasir = new javax.swing.JMenuItem();
mnPelanggan = new javax.swing.JMenuItem();
mnBarang = new javax.swing.JMenuItem();
mnTransaksi = new javax.swing.JMenu();
mnLaporan = new javax.swing.JMenu();
mnEdit = new javax.swing.JMenu();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jLabel1.setFont(new java.awt.Font("Tahoma", 0, 24)); // NOI18N
jLabel1.setText("SELAMAT DATANG");
jLabel2.setFont(new java.awt.Font("Tahoma", 0, 24)); // NOI18N
jLabel2.setText("ANDA SEDANG MENGGUNAKAN");
jLabel3.setFont(new java.awt.Font("Tahoma", 0, 24)); // NOI18N
jLabel3.setText("APLIKASI VERSI BETA");
btLogout.setText("Logout");
btLogout.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
btLogoutMouseClicked(evt);
}
});
btLogout.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btLogoutActionPerformed(evt);
}
});
jLabel4.setText("* Aplikasi ini dibuat oleh Alfi Hidayat");
mnData.setText("Data");
mnKasir.setText("Kasir");
mnData.add(mnKasir);
mnPelanggan.setText("Pelanggan");
mnData.add(mnPelanggan);
mnBarang.setText("Barang");
mnData.add(mnBarang);
jMenuBar1.add(mnData);
mnTransaksi.setText("Transaksi");
jMenuBar1.add(mnTransaksi);
mnLaporan.setText("Laporan");
jMenuBar1.add(mnLaporan);
mnEdit.setText("Edit");
jMenuBar1.add(mnEdit);
setJMenuBar(jMenuBar1);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addComponent(btLogout))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(50, 50, 50)
.addComponent(jLabel2))
.addGroup(layout.createSequentialGroup()
.addGap(119, 119, 119)
.addComponent(jLabel1))
.addGroup(layout.createSequentialGroup()
.addGap(100, 100, 100)
.addComponent(jLabel3))
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel4)))
.addContainerGap(59, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(btLogout)
.addGap(54, 54, 54)
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 84, Short.MAX_VALUE)
.addComponent(jLabel4))
);
pack();
}// </editor-fold>
private void btLogoutActionPerformed(java.awt.event.ActionEvent evt) {
aksi_logout(); // TODO add your handling code here:
}
private void btLogoutMouseClicked(java.awt.event.MouseEvent evt) {
aksi_logout();
// TODO add your handling code here:
}
/**
* @param args the command line arguments
*/
// Variables declaration - do not modify
private javax.swing.JButton btLogout;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JMenuItem mnBarang;
private javax.swing.JMenu mnData;
private javax.swing.JMenu mnEdit;
private javax.swing.JMenuItem mnKasir;
private javax.swing.JMenu mnLaporan;
private javax.swing.JMenuItem mnPelanggan;
private javax.swing.JMenu mnTransaksi;
// End of variables declaration
public void loginadmin(){
mnData.setEnabled(true);
mnKasir.setEnabled(true);
mnBarang.setEnabled(true);
mnPelanggan.setEnabled(true);
mnTransaksi.setEnabled(true);
mnLaporan.setEnabled(true);
mnEdit.setEnabled(true);
btLogout.setEnabled(true);
}
public void loginpemilik(){
mnData.setEnabled(true);
mnKasir.setEnabled(true);
mnBarang.setEnabled(true);
mnPelanggan.setEnabled(true);
mnTransaksi.setEnabled(true);
mnLaporan.setEnabled(true);
mnEdit.setEnabled(false);
btLogout.setEnabled(true);
}
public void loginkasir(){
mnData.setEnabled(true);
mnKasir.setEnabled(false);
mnBarang.setEnabled(true);
mnPelanggan.setEnabled(true);
mnTransaksi.setEnabled(true);
mnLaporan.setEnabled(false);
mnEdit.setEnabled(false);
btLogout.setEnabled(true);
}
private void aksi_logout(){
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new frLogin().setVisible(true);
dispose();
this.setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
System.exit(0);
//new FrmLogin(kodelogin).setVisible(true);
}
private void setVisible(boolean b) {
//To change body of generated methods, choose Tools | Templates.
}
private void setDefaultCloseOperation(int EXIT_ON_CLOSE) {
//To change body of generated methods, choose Tools | Templates.
}
});
}
}
Dibawah ini video demo dari aplikasi yang saya buat :
