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

Postingan populer dari blog ini

TUGAS 2 : Jettpack compose : Hello, World!

Pertemuan 3 PPB (A) - Mengenal Composable Aplikasi Selamat Ulang Tahun

Pertemuan 5 - Aplikasi Kalkulator Sederhana