Nama : Naufal Daffa Alfa Zain
NRP : 5025241066
Kelas : Pemrograman Berbasis Objek - A2
Pada pertemuan ke 14 ini kami diminta membuat form login dan aplikasi Simple Image Viewer dengan menggunakan GUI. GUI sendiri berfungsi agar interaksi pengguna lebih mudah dan intuitif karena setiap fitur ditampilkan sebagai komponen visual yang bisa langsung diklik.
Latihan 1
Membuat frame dalam windows untuk login menggunakan username dan password, lalu mengecek apakah valid atau tidak
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class LoginForm extends JFrame implements ActionListener {
private final JTextField usernameField = new JTextField(15);
private final JPasswordField passwordField = new JPasswordField(15);
private final JButton loginButton = new JButton("Login");
public LoginForm() {
super("Login");
buildUi();
}
private void buildUi() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
JPanel panel = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(5, 5, 5, 5);
gbc.anchor = GridBagConstraints.WEST;
gbc.gridx = 0;
gbc.gridy = 0;
panel.add(new JLabel("Username"), gbc);
gbc.gridx = 1;
panel.add(usernameField, gbc);
gbc.gridx = 0;
gbc.gridy = 1;
panel.add(new JLabel("Password"), gbc);
gbc.gridx = 1;
panel.add(passwordField, gbc);
loginButton.addActionListener(this);
gbc.gridx = 0;
gbc.gridy = 2;
gbc.gridwidth = 2;
gbc.fill = GridBagConstraints.HORIZONTAL;
panel.add(loginButton, gbc);
add(panel);
pack();
setLocationRelativeTo(null);
}
private void attemptLogin() {
String username = usernameField.getText().trim();
String password = new String(passwordField.getPassword());
if ("admin".equals(username) && "password".equals(password)) {
JOptionPane.showMessageDialog(this, "Login berhasil!", "Sukses", JOptionPane.INFORMATION_MESSAGE);
} else {
JOptionPane.showMessageDialog(this, "Username atau password salah.", "Gagal", JOptionPane.ERROR_MESSAGE);
}
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == loginButton) {
attemptLogin();
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new LoginForm().setVisible(true));
}
}
Latihan 2
ImageViewer membuka jendela “Simple Image Viewer” dengan tiga tombol: memilih gambar dari file chooser, memperbesar, dan memperkecil. Setelah gambar dipilih, ia ditampilkan GUI dan setiap klik zoom akan menghitung ulang ukuran dengan faktor baru sehingga pengguna dapat melihat gambar secara lebih detail atau lebih kecil.
Source Code :
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
public class ImageViewer extends JFrame implements ActionListener {
private final JLabel imageLabel = new JLabel("", SwingConstants.CENTER);
private final JButton openButton = new JButton("Open Image");
private final JButton zoomInButton = new JButton("Zoom In");
private final JButton zoomOutButton = new JButton("Zoom Out");
private Image originalImage;
private double zoomFactor = 1.0;
public ImageViewer() {
super("Simple Image Viewer");
initUi();
}
private void initUi() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout(10, 10));
JPanel controlPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
controlPanel.add(openButton);
controlPanel.add(zoomInButton);
controlPanel.add(zoomOutButton);
add(controlPanel, BorderLayout.NORTH);
JScrollPane scrollPane = new JScrollPane(imageLabel);
add(scrollPane, BorderLayout.CENTER);
openButton.addActionListener(this);
zoomInButton.addActionListener(this);
zoomOutButton.addActionListener(this);
setSize(600, 450);
setLocationRelativeTo(null);
}
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == openButton) {
openImage();
} else if (source == zoomInButton) {
adjustZoom(0.1);
} else if (source == zoomOutButton) {
adjustZoom(-0.1);
}
}
private void openImage() {
JFileChooser chooser = new JFileChooser();
chooser.setFileFilter(new FileNameExtensionFilter("Image Files", "jpg", "jpeg", "png", "gif", "bmp"));
if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
File file = chooser.getSelectedFile();
ImageIcon icon = new ImageIcon(file.getAbsolutePath());
if (icon.getIconWidth() > 0 && icon.getIconHeight() > 0) {
originalImage = icon.getImage();
zoomFactor = 1.0;
updateImage();
} else {
JOptionPane.showMessageDialog(this, "File tidak dapat dibuka sebagai gambar.", "Error", JOptionPane.ERROR_MESSAGE);
}
}
}
private void adjustZoom(double delta) {
if (originalImage == null) {
JOptionPane.showMessageDialog(this, "Buka gambar terlebih dahulu.", "Info", JOptionPane.INFORMATION_MESSAGE);
return;
}
double newFactor = zoomFactor + delta;
newFactor = Math.max(0.2, Math.min(newFactor, 3.0));
if (newFactor != zoomFactor) {
zoomFactor = newFactor;
updateImage();
}
}
private void updateImage() {
int width = (int) (originalImage.getWidth(null) * zoomFactor);
int height = (int) (originalImage.getHeight(null) * zoomFactor);
if (width <= 0 || height <= 0) {
return;
}
Image scaled = originalImage.getScaledInstance(width, height, Image.SCALE_SMOOTH);
imageLabel.setIcon(new ImageIcon(scaled));
imageLabel.setText("");
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new ImageViewer().setVisible(true));
}
}
No comments:
Post a Comment