PBO 13
muhammad rafi budi purnama
5025221307
PBO 13
code : https://github.com/mbahbud/PBO.git
Program GUI Sederhana
Pada tugas 13 ini kita diminta untuk membuat tugas GUI sederhana yang diterapkan pada bahasa pemrograman java.
Gambar 1. Hasil program ketika memasukkan user dan password yang salah
Gambar 2. Hasil program ketika memasukkan user dan password yang benar
Pada implementasi GUI yang diterapkan, kita membuat dua kasus utama yaitu ketika user memasukkan kredensial dengan benar dan kredensial yang salah. Ketika user memasukkan kredensial
Username : admin
Password : 12345
program akan memberikan popup window yang menampilkan pesan login berhasil. Selain itu, program akan menampilkan pesan "usernam atau password salah". Implementasi dari program tersebut adalah seperti berikut.
GUI.java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class LoginGUI extends JFrame implements ActionListener {
// Komponen GUI
private JLabel labelJudul, labelUsername, labelPassword;
private JTextField fieldUsername;
private JPasswordField fieldPassword;
private JButton btnLogin, btnReset;
// Constructor
public LoginGUI() {
// Setup Frame
setTitle("Form Login");
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null); // Tampil di tengah layar
setResizable(false);
// Panel utama dengan layout null untuk positioning manual
JPanel panel = new JPanel();
panel.setLayout(null);
panel.setBackground(new Color(240, 248, 255));
// Label Judul
labelJudul = new JLabel("FORM LOGIN");
labelJudul.setFont(new Font("Arial", Font.BOLD, 24));
labelJudul.setBounds(120, 20, 200, 30);
labelJudul.setForeground(new Color(25, 25, 112));
panel.add(labelJudul);
// Label Username
labelUsername = new JLabel("Username:");
labelUsername.setFont(new Font("Arial", Font.PLAIN, 14));
labelUsername.setBounds(50, 80, 100, 25);
panel.add(labelUsername);
// Field Username
fieldUsername = new JTextField();
fieldUsername.setFont(new Font("Arial", Font.PLAIN, 14));
fieldUsername.setBounds(150, 80, 200, 25);
panel.add(fieldUsername);
// Label Password
labelPassword = new JLabel("Password:");
labelPassword.setFont(new Font("Arial", Font.PLAIN, 14));
labelPassword.setBounds(50, 120, 100, 25);
panel.add(labelPassword);
// Field Password
fieldPassword = new JPasswordField();
fieldPassword.setFont(new Font("Arial", Font.PLAIN, 14));
fieldPassword.setBounds(150, 120, 200, 25);
panel.add(fieldPassword);
// Button Login
btnLogin = new JButton("Login");
btnLogin.setFont(new Font("Arial", Font.BOLD, 14));
btnLogin.setBounds(100, 180, 100, 35);
btnLogin.setBackground(new Color(34, 139, 34));
btnLogin.setForeground(Color.WHITE);
btnLogin.setFocusPainted(false);
btnLogin.addActionListener(this);
panel.add(btnLogin);
// Button Reset
btnReset = new JButton("Reset");
btnReset.setFont(new Font("Arial", Font.BOLD, 14));
btnReset.setBounds(220, 180, 100, 35);
btnReset.setBackground(new Color(220, 20, 60));
btnReset.setForeground(Color.WHITE);
btnReset.setFocusPainted(false);
btnReset.addActionListener(this);
panel.add(btnReset);
// Tambahkan panel ke frame
add(panel);
// Tambahkan listener untuk Enter key pada password field
fieldPassword.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
loginProcess();
}
}
});
}
// Method untuk handle tombol
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == btnLogin) {
loginProcess();
} else if (e.getSource() == btnReset) {
resetForm();
}
}
// Method untuk proses login
private void loginProcess() {
String username = fieldUsername.getText();
String password = new String(fieldPassword.getPassword());
// Validasi input kosong
if (username.isEmpty() || password.isEmpty()) {
JOptionPane.showMessageDialog(this,
"Username dan Password tidak boleh kosong!",
"Peringatan",
JOptionPane.WARNING_MESSAGE);
return;
}
// Validasi login (hardcoded untuk demo)
// Anda bisa modifikasi ini dengan database atau file
if (username.equals("admin") && password.equals("12345")) {
JOptionPane.showMessageDialog(this,
"Login Berhasil!\nSelamat datang, " + username + "!",
"Sukses",
JOptionPane.INFORMATION_MESSAGE);
// Buka window baru setelah login berhasil
this.dispose(); // Tutup form login
new WelcomeWindow(username).setVisible(true);
} else {
JOptionPane.showMessageDialog(this,
"Username atau Password salah!",
"Login Gagal",
JOptionPane.ERROR_MESSAGE);
resetForm();
}
}
// Method untuk reset form
private void resetForm() {
fieldUsername.setText("");
fieldPassword.setText("");
fieldUsername.requestFocus();
}
// Main method untuk menjalankan program
public static void main(String[] args) {
// Gunakan SwingUtilities untuk thread safety
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new LoginGUI().setVisible(true);
}
});
}
}
// Class untuk window setelah login berhasil
class WelcomeWindow extends JFrame {
public WelcomeWindow(String username) {
setTitle("Dashboard");
setSize(500, 350);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.setBackground(new Color(245, 245, 245));
// Panel atas dengan welcome message
JPanel topPanel = new JPanel();
topPanel.setBackground(new Color(70, 130, 180));
topPanel.setPreferredSize(new Dimension(500, 100));
JLabel welcomeLabel = new JLabel("Selamat Datang, " + username + "!");
welcomeLabel.setFont(new Font("Arial", Font.BOLD, 26));
welcomeLabel.setForeground(Color.WHITE);
topPanel.add(welcomeLabel);
// Panel tengah dengan informasi
JPanel centerPanel = new JPanel();
centerPanel.setLayout(new GridLayout(4, 1, 10, 10));
centerPanel.setBackground(new Color(245, 245, 245));
centerPanel.setBorder(BorderFactory.createEmptyBorder(30, 50, 30, 50));
JLabel infoLabel = new JLabel("Anda berhasil login ke sistem!");
infoLabel.setFont(new Font("Arial", Font.PLAIN, 16));
infoLabel.setHorizontalAlignment(SwingConstants.CENTER);
JLabel dateLabel = new JLabel("Tanggal: " + java.time.LocalDate.now());
dateLabel.setFont(new Font("Arial", Font.PLAIN, 14));
dateLabel.setHorizontalAlignment(SwingConstants.CENTER);
JLabel timeLabel = new JLabel("Waktu: " + java.time.LocalTime.now().toString().substring(0, 8));
timeLabel.setFont(new Font("Arial", Font.PLAIN, 14));
timeLabel.setHorizontalAlignment(SwingConstants.CENTER);
centerPanel.add(infoLabel);
centerPanel.add(dateLabel);
centerPanel.add(timeLabel);
// Button logout
JButton btnLogout = new JButton("Logout");
btnLogout.setFont(new Font("Arial", Font.BOLD, 14));
btnLogout.setBackground(new Color(220, 20, 60));
btnLogout.setForeground(Color.WHITE);
btnLogout.setFocusPainted(false);
btnLogout.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int confirm = JOptionPane.showConfirmDialog(
WelcomeWindow.this,
"Apakah Anda yakin ingin logout?",
"Konfirmasi Logout",
JOptionPane.YES_NO_OPTION
);
if (confirm == JOptionPane.YES_OPTION) {
dispose();
new LoginGUI().setVisible(true);
}
}
});
JPanel buttonPanel = new JPanel();
buttonPanel.setBackground(new Color(245, 245, 245));
buttonPanel.add(btnLogout);
centerPanel.add(buttonPanel);
panel.add(topPanel, BorderLayout.NORTH);
panel.add(centerPanel, BorderLayout.CENTER);
add(panel);
}
}
Komentar
Posting Komentar