Pertemuan 13: Pemrograman GUI
Tugas Pertemuan 13
Nama: Farrel Aqilla Novianto
NRP: 5025241015
Kelas: Pemrograman Berorientasi Objek (A)
Graphical User Interface (GUI)
GUI merupakan desain aplikasi dengan tampilan visual sehingga pengguna dapat dengan mudah menggunakan aplikasi. The Java Foundation Class (JFC), merupakan bagian penting dari Java SDK, yang termasuk dalam koleksi dari API dimana dapat mempermudah pengembangan aplikasi JAVA GUI. JFC termasuk diantara 5 bagian utama dari API yaitu AWT dan Swing. Tiga bagian yang lainnya dari API adalah Java2D, Accessibility, dan Drag dan Drop. Semua itu membantu pengembang dalam mendesain dan mengimplementasikan aplikasi visual yang lebih baik.
AWT dan Swing menyediakan komponen GUI yang dapat digunakan dalam membuat aplikasi Java dan applet. Anda akan mempelajari applet pada bab berikutnya. Tidak seperti beberapa komponen AWT yang menggunakan native code, keseluruhan Swing ditulis menggunakan bahasa pemrograman Java.
Swing menyediakan implementasi platform-independent dimana aplikasi yang dikembangkan dengan platform yang berbeda dapat memiliki tampilan yang sama. Begitu juga dengan AWT menjamin tampilan look and feel pada aplikasi yang dijalankan pada dua mesin yang berbeda menjadi terlihat sama. Swing API dibangun dari beberapa API yang mengimplementasikan beberapa jenis bagian dari AWT. Kesimpulannya, komponen AWT dapat digunakan bersama-sama dengan komponen Swing.
Latihan
- Membuat frame windows user login dan password.
- Implementasikan aplikasi image viewer.
Kode User.java
/**
* @author Farrel Aqilla Novianto
*/
import java.util.ArrayList;
import java.util.List;
public class User{
private String username;
private String password;
public User(String username, String password){
this.username = username;
this.password = password;
}
public String getUsername(){
return username;
}
public void setUsername(String username){
this.username = username;
}
public String getPassword(){
return password;
}
public void setPassword(String password){
this.password = password;
}
public boolean authenticate(String inputUsername, String inputPassword){
return this.username.equals(inputUsername) && this.password.equals(inputPassword);
}
}
class UserDatabase{
private List<User> users;
public UserDatabase(){
users = new ArrayList<>();
users.add(new User("james3302", "pass"));
users.add(new User("admin", "admin123"));
users.add(new User("user1", "password1"));
}
public void addUser(User user){
users.add(user);
}
public boolean validateUser(String username, String password){
for(User user : users){
if(user.authenticate(username, password)){
return true;
}
}
return false;
}
public User findUser(String username){
for(User user : users){
if(user.getUsername().equals(username)){
return user;
}
}
return null;
}
}Kode LoginPanel.java
/**
* @author Farrel Aqilla Novianto
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class LoginPanel{
private UserDatabase userDatabase;
private JTextField txtUsername;
private JTextField txtPassword;
public LoginPanel(){
userDatabase = new UserDatabase();
createAndShowGUI();
}
public void createAndShowGUI(){
JFrame frame = new JFrame("Login System");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(3, 2, 10, 10));
JLabel lblUsername = new JLabel("Username:");
JLabel lblPassword = new JLabel("Password:");
txtUsername = new JTextField(20);
txtPassword = new JPasswordField(20);
JButton btnLogin = new JButton("Login");
btnLogin.addActionListener(new LoginListener());
JButton btnCancel = new JButton("Cancel");
btnCancel.addActionListener(new CancelListener());
panel.add(lblUsername);
panel.add(txtUsername);
panel.add(lblPassword);
panel.add(txtPassword);
panel.add(btnLogin);
panel.add(btnCancel);
frame.getContentPane().add(BorderLayout.CENTER, panel);
frame.setSize(400, 200);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private class LoginListener implements ActionListener{
public void actionPerformed(ActionEvent event){
String msg;
String inputUsername = txtUsername.getText();
String inputPassword = txtPassword.getText();
if(userDatabase.validateUser(inputUsername, inputPassword)){
msg = "Login Granted!";
}
else{
msg = "Login Denied";
}
JOptionPane.showMessageDialog(null, msg);
}
}
private class CancelListener implements ActionListener{
public void actionPerformed(ActionEvent event){
txtUsername.setText("");
txtPassword.setText("");
txtUsername.requestFocus();
}
}
}Kode Main.java
/**
* @author Farrel Aqilla Novianto
*/
public class Main{
public static void main(String[] args){
javax.swing.SwingUtilities.invokeLater(new Runnable(){
public void run(){
new LoginPanel();
}
});
}
}Dokumentasi
Kode ImageData.java
/**
* @author Farrel Aqilla Novianto
*/
import javax.swing.*;
import java.util.ArrayList;
import java.util.List;
import java.io.File;
import java.awt.Image;
public class ImageData{
private String filePath;
private String fileName;
private ImageIcon originalIcon;
public ImageData(String filePath){
this.filePath = filePath;
File file = new File(filePath);
this.fileName = file.getName();
this.originalIcon = new ImageIcon(filePath);
}
public String getFilePath(){
return filePath;
}
public String getFileName(){
return fileName;
}
public ImageIcon getOriginalIcon(){
return originalIcon;
}
public ImageIcon getScaledIcon(double scale){
int width = (int)(originalIcon.getIconWidth() * scale);
int height = (int)(originalIcon.getIconHeight() * scale);
Image scaledImage = originalIcon.getImage().getScaledInstance(
width, height, Image.SCALE_SMOOTH);
return new ImageIcon(scaledImage);
}
}
class ImageManager{
private List<ImageData> images;
private int currentIndex;
private double zoomLevel;
public ImageManager(){
images = new ArrayList<>();
currentIndex = -1;
zoomLevel = 1.0;
}
public boolean loadImage(String filePath){
try{
ImageData imageData = new ImageData(filePath);
images.add(imageData);
currentIndex = images.size() - 1;
zoomLevel = 1.0;
return true;
}
catch(Exception e){
return false;
}
}
public void nextImage(){
if(!images.isEmpty()){
currentIndex = (currentIndex + 1) % images.size();
zoomLevel = 1.0;
}
}
public void previousImage(){
if(!images.isEmpty()){
currentIndex = (currentIndex - 1 + images.size()) % images.size();
zoomLevel = 1.0;
}
}
public void zoomIn(){
if(zoomLevel < 3.0){
zoomLevel += 0.25;
}
}
public void zoomOut(){
if(zoomLevel > 0.25){
zoomLevel -= 0.25;
}
}
public ImageIcon getCurrentImage(){
if(currentIndex >= 0 && currentIndex < images.size()){
return images.get(currentIndex).getScaledIcon(zoomLevel);
}
return null;
}
public String getCurrentImageName(){
if(currentIndex >= 0 && currentIndex < images.size()){
return images.get(currentIndex).getFileName();
}
return "";
}
public int getCurrentIndex(){
return currentIndex;
}
public int getImageCount(){
return images.size();
}
public void clearImages(){
images.clear();
currentIndex = -1;
zoomLevel = 1.0;
}
}Kode ImageViewerPanel.java
/**
* @author Farrel Aqilla Novianto
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.File;
public class ImageViewerPanel{
private ImageManager imageManager;
private JLabel imageLabel;
private JFrame frame;
private JLabel statusLabel;
public ImageViewerPanel(){
imageManager = new ImageManager();
createAndShowGUI();
}
public void createAndShowGUI(){
frame = new JFrame("Image Viewer");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
imageLabel = new JLabel("No Image Loaded", SwingConstants.CENTER);
imageLabel.setPreferredSize(new Dimension(600, 400));
imageLabel.setBorder(BorderFactory.createLineBorder(Color.GRAY, 2));
JScrollPane scrollPane = new JScrollPane(imageLabel);
frame.add(scrollPane, BorderLayout.CENTER);
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new FlowLayout());
JButton btnOpen = new JButton("Open Image");
btnOpen.addActionListener(new OpenImageListener());
JButton btnPrevious = new JButton("Previous");
btnPrevious.addActionListener(new PreviousListener());
JButton btnNext = new JButton("Next");
btnNext.addActionListener(new NextListener());
JButton btnZoomIn = new JButton("Zoom In");
btnZoomIn.addActionListener(new ZoomInListener());
JButton btnZoomOut = new JButton("Zoom Out");
btnZoomOut.addActionListener(new ZoomOutListener());
JButton btnClear = new JButton("Clear");
btnClear.addActionListener(new ClearListener());
buttonPanel.add(btnOpen);
buttonPanel.add(btnPrevious);
buttonPanel.add(btnNext);
buttonPanel.add(btnZoomIn);
buttonPanel.add(btnZoomOut);
buttonPanel.add(btnClear);
frame.add(buttonPanel, BorderLayout.NORTH);
statusLabel = new JLabel("Ready");
statusLabel.setBorder(BorderFactory.createEtchedBorder());
frame.add(statusLabel, BorderLayout.SOUTH);
frame.setSize(700, 550);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private void updateImage(){
ImageIcon icon = imageManager.getCurrentImage();
if(icon != null){
imageLabel.setIcon(icon);
imageLabel.setText("");
statusLabel.setText("Image: " + imageManager.getCurrentImageName() + " (" + (imageManager.getCurrentIndex() + 1) + "/" + imageManager.getImageCount() + ")");
}
else{
imageLabel.setIcon(null);
imageLabel.setText("No Image Loaded");
statusLabel.setText("Ready");
}
}
private class OpenImageListener implements ActionListener{
public void actionPerformed(ActionEvent event){
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(new javax.swing.filechooser.FileNameExtensionFilter(
"Image Files", "jpg", "jpeg", "png", "gif", "bmp"));
int result = fileChooser.showOpenDialog(frame);
if(result == JFileChooser.APPROVE_OPTION){
File selectedFile = fileChooser.getSelectedFile();
if(imageManager.loadImage(selectedFile.getAbsolutePath())){
updateImage();
}
else{
JOptionPane.showMessageDialog(frame, "Failed to load image!", "Error", JOptionPane.ERROR_MESSAGE);
}
}
}
}
private class PreviousListener implements ActionListener{
public void actionPerformed(ActionEvent event){
imageManager.previousImage();
updateImage();
}
}
private class NextListener implements ActionListener{
public void actionPerformed(ActionEvent event){
imageManager.nextImage();
updateImage();
}
}
private class ZoomInListener implements ActionListener{
public void actionPerformed(ActionEvent event){
imageManager.zoomIn();
updateImage();
}
}
private class ZoomOutListener implements ActionListener{
public void actionPerformed(ActionEvent event){
imageManager.zoomOut();
updateImage();
}
}
private class ClearListener implements ActionListener{
public void actionPerformed(ActionEvent event){
imageManager.clearImages();
updateImage();
}
}
}Kode Main.java
/**
* @author Farrel Aqilla Novianto
*/
public class Main{
public static void main(String[] args){
javax.swing.SwingUtilities.invokeLater(new Runnable(){
public void run(){
new ImageViewerPanel();
}
});
}
}
Komentar
Posting Komentar