MOchamad Kolbi Nuron_5025231183_Tugas PBO 14
Nama: Mochamad Kolbi Nuron
NRP: 5025231183
Kelas: PBO A Tugas 14
Implementasi GUI
Main.java
import javax.swing.*;
public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
LoginFrame login = new LoginFrame();
login.setVisible(true);
});
}
}
ImageViewer.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.File;
public class ImageViewer {
private JFrame frame;
private ImagePanel imagePanel;
private JLabel filenameLabel;
private JLabel statusLabel;
private OFImage currentImage;
private static JFileChooser fileChooser = new JFileChooser(System.getProperty("user.dir"));
public ImageViewer() {
makeFrame();
}
private void makeFrame() {
frame = new JFrame("Image Viewer");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = frame.getContentPane();
contentPane.setLayout(new BorderLayout(6, 6));
filenameLabel = new JLabel("No file displayed.");
contentPane.add(filenameLabel, BorderLayout.NORTH);
imagePanel = new ImagePanel();
contentPane.add(imagePanel, BorderLayout.CENTER);
statusLabel = new JLabel("Ready");
contentPane.add(statusLabel, BorderLayout.SOUTH);
makeMenuBar(frame);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private void makeMenuBar(JFrame frame) {
JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("File");
JMenuItem openItem = new JMenuItem("Open");
openItem.addActionListener(e -> openFile());
fileMenu.add(openItem);
JMenuItem closeItem = new JMenuItem("Close");
closeItem.addActionListener(e -> closeFile());
fileMenu.add(closeItem);
JMenuItem quitItem = new JMenuItem("Quit");
quitItem.addActionListener(e -> System.exit(0));
fileMenu.add(quitItem);
JMenu filterMenu = new JMenu("Filter");
JMenuItem darkerItem = new JMenuItem("Darker");
darkerItem.addActionListener(e -> applyDarker());
filterMenu.add(darkerItem);
JMenuItem lighterItem = new JMenuItem("Lighter");
lighterItem.addActionListener(e -> applyLighter());
filterMenu.add(lighterItem);
menuBar.add(fileMenu);
menuBar.add(filterMenu);
frame.setJMenuBar(menuBar);
}
private void openFile() {
int returnVal = fileChooser.showOpenDialog(frame);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
currentImage = ImageFileManager.loadImage(file);
if (currentImage != null) {
imagePanel.setImage(currentImage);
filenameLabel.setText("File: " + file.getName());
}
}
}
private void closeFile() {
currentImage = null;
imagePanel.clearImage();
filenameLabel.setText("No file displayed.");
}
private void applyDarker() {
if (currentImage != null) {
currentImage.darker();
frame.repaint();
}
}
private void applyLighter() {
if (currentImage != null) {
currentImage.lighter();
frame.repaint();
}
}
}
ImagePanel.java
import java.awt.*;
import javax.swing.*;
public class ImagePanel extends JComponent {
private OFImage panelImage;
public void setImage(OFImage image) {
panelImage = image;
repaint();
}
public void clearImage() {
panelImage = null;
repaint();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (panelImage != null) {
g.drawImage(panelImage, 0, 0, getWidth(), getHeight(), null);
}
}
}
ImageFileManager.java
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class ImageFileManager {
public static OFImage loadImage(File file) {
try {
BufferedImage image = ImageIO.read(file);
return new OFImage(image);
} catch (Exception e) {
return null;
}
}
}
OFImage.java
import java.awt.*;
import java.awt.image.BufferedImage;
public class OFImage extends BufferedImage {
public OFImage(BufferedImage image) {
super(image.getColorModel(), image.copyData(null), image.isAlphaPremultiplied(), null);
}
public void darker() {
for (int y = 0; y < getHeight(); y++) {
for (int x = 0; x < getWidth(); x++) {
int rgb = getRGB(x, y);
Color color = new Color(rgb);
color = color.darker();
setRGB(x, y, color.getRGB());
}
}
}
public void lighter() {
for (int y = 0; y < getHeight(); y++) {
for (int x = 0; x < getWidth(); x++) {
int rgb = getRGB(x, y);
Color color = new Color(rgb);
color = color.brighter();
setRGB(x, y, color.getRGB());
}
}
}
}
LoginFrame.java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class LoginFrame extends JFrame {
private JTextField usernameField;
private JPasswordField passwordField;
public LoginFrame() {
setTitle("Login");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300, 200);
setLocationRelativeTo(null);
setLayout(new BorderLayout());
// Panel untuk input
JPanel inputPanel = new JPanel(new GridLayout(2, 2, 5, 5));
inputPanel.add(new JLabel("Username:"));
usernameField = new JTextField();
inputPanel.add(usernameField);
inputPanel.add(new JLabel("Password:"));
passwordField = new JPasswordField();
inputPanel.add(passwordField);
add(inputPanel, BorderLayout.CENTER);
// Tombol login
JButton loginButton = new JButton("Login");
loginButton.addActionListener(e -> checkLogin());
add(loginButton, BorderLayout.SOUTH);
}
private void checkLogin() {
String username = usernameField.getText();
String password = new String(passwordField.getPassword());
// Validasi login
if (username.equals("admin") && password.equals("password")) {
JOptionPane.showMessageDialog(this, "Login berhasil!");
dispose(); // Tutup jendela login
new ImageViewer(); // Lanjutkan ke program utama
} else {
JOptionPane.showMessageDialog(this, "Username atau password salah!", "Login Gagal", JOptionPane.ERROR_MESSAGE);
}
}
}
hasil:
Komentar
Posting Komentar