Tugas 14 - Implementasi GUI
Nama: Dewa Putu Ananda Taurean Mahesa
Hasil saat program berjalan:
- Kelas ImagePanel
NRP: 5025231158
Kelas: PBO A
Implementasi GUI
1. Login Panel
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Login{
String Username = "james3302";
String Password = "pass";
String msg = " ";
JTextField txtUsername = new JTextField(20);
JTextField txtPassword = new JTextField(20);
public static void main(String[] args){
Login gui = new Login();
gui.go();
}
public void go(){
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
JLabel lblUsername = new JLabel("Username:");
JLabel lblPassword = new JLabel("Password:");
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);
frame.getContentPane().add(BorderLayout.CENTER,panel);
frame.setSize(300,300);
frame.setVisible(true);
}
public class LoginListener implements ActionListener{
public void actionPerformed(ActionEvent event){
if(Username.equals(txtUsername.getText())){
if(Password.equals(txtPassword.getText())){
msg = "Login Granted!";
}else{
msg = "Login Denied";
}
}else{
msg = "Login Denied";
}
JOptionPane.showMessageDialog(null,msg);
}
}
public class CancelListener implements ActionListener{
public void actionPerformed(ActionEvent event){
txtUsername.setText(Username);
txtPassword.setText(Password);
txtUsername.requestFocus();
}
}
}
Pada kelas Login terdapat atribut Username dan Password, msg yang menyimpan pesan hasil login, serta txtUsername dan txtPassword sebagain input teks untuk username dan password. Method main() akan membuat objek Login dan menjalankan method go(). Method go() berfungsi untuk membuat GUI form login. LoginListener berfungsi untuk menangani aksi tombol Login.
2. Image Viewer
- Kelas OFImage
import java.awt.*;
import java.awt.image.*;
public class OFImage extends BufferedImage {
public OFImage(BufferedImage image) {
super(
image.getColorModel(),
image.copyData(null),
image.isAlphaPremultiplied(),
null
);
}
public OFImage(int width, int height) {
super(width, height, TYPE_INT_RGB);
}
public void setPixel(int x, int y, Color col) {
if (x >= 0 && x < getWidth() && y >= 0 && y < getHeight()) {
int pixel = col.getRGB();
setRGB(x, y, pixel);
}
}
public Color getPixel(int x, int y) {
int pixel = getRGB(x, y);
return new Color(pixel);
}
public void darker() {
int height = getHeight();
int width = getWidth();
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
setPixel(x, y, getPixel(x, y).darker());
}
}
}
public void lighter() {
int height = getHeight();
int width = getWidth();
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
setPixel(x, y, getPixel(x, y).brighter());
}
}
}
public void threshold() {
int height = getHeight();
int width = getWidth();
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
Color pixel = getPixel(x, y);
int brightness =
(pixel.getRed() +
pixel.getGreen() +
pixel.getBlue()) / 3;
if (brightness <= 85) {
setPixel(x, y, Color.BLACK);
} else if (brightness <= 170) {
setPixel(x, y, Color.GRAY);
} else {
setPixel(x, y, Color.WHITE);
}
}
}
}
}
OFImage adalah kelas yang berfungsi untuk memanipulasi gambar, seperti setPixel() untuk mengatur warna, darker() atau lighter() untuk membuat gambar menjadi lebih gelap atau terang, dan threshold() untuk menambah filter threshold pada gambar.
- Kelas ImageFileManager
import java.awt.image.*;
import javax.imageio.*;
import java.io.*;
public class ImageFileManager {
private static final String IMAGE_FORMAT = "jpg";
public static OFImage loadImage(File imageFile) {
try {
BufferedImage image = ImageIO.read(imageFile);
if(image == null || (image.getWidth() < 0)) {
return null;
}
return new OFImage(image);
} catch (IOException exc) {
return null;
}
}
public static void saveImage(OFImage image, File file) {
try {
ImageIO.write(image, IMAGE_FORMAT, file);
} catch(IOException exc) {
return;
}
}
}
Kelas ini berfungsi untuk menyimpan dan membaca file gambar.
- Kelas ImagePanel
import java.awt.*;
import javax.swing.JComponent;
public class ImagePanel extends JComponent{
private int width, height;
private OFImage panelImage;
public ImagePanel() {
width = 360;
height = 240;
panelImage = null;
}
public void setImage(OFImage image) {
if(image != null) {
width = image.getWidth();
height = image.getHeight();
panelImage = image;
repaint();
}
}
public void clearImage() {
if (panelImage != null) {
Graphics imageGraphics = panelImage.getGraphics();
imageGraphics.setColor(Color.LIGHT_GRAY);
imageGraphics.fillRect(0, 0, width, height);
}
repaint();
}
public Dimension getPreferredSize() {
return new Dimension(width, height);
}
public void paintComponent(Graphics g) {
Dimension size = getSize();
g.clearRect(0, 0, size.width, size.height);
if(panelImage != null) {
g.drawImage(panelImage, 0, 0, null);
}
}
}
Kelas ini berfungsi untuk mengatur dan menampilkan gambar di GUI. Terdapat method setImage() untuk mengatur dan menyesuaikan ukuran gambar, clearImage() untuk menghilangkan gambar dari GUI, getPreferredSize() yang akan me-return ukuran gambar, dan paintComponent untuk menggambar ulang GUI sesuai gambar.
- Kelas ImageViewer
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.File;
public class ImageViewer {
private static final String VERSION = "Version 1.0";
private static JFileChooser fileChooser = new JFileChooser(System.getProperty("user.dir"));
private JFrame frame;
private ImagePanel imagePanel;
private JLabel filenameLabel;
private JLabel statusLabel;
private OFImage currentImage;
public ImageViewer() {
currentImage = null;
makeFrame();
}
private void openFile() {
int returnVal = fileChooser.showOpenDialog(frame);
if(returnVal != JFileChooser.APPROVE_OPTION) {
return ;
}
File selectedFile = fileChooser.getSelectedFile();
currentImage = ImageFileManager.loadImage(selectedFile);
if(currentImage == null) {
JOptionPane.showMessageDialog(
frame,
"The file was not in a recognized image file format.",
"Image Load Error",
JOptionPane.ERROR_MESSAGE
);
return;
}
imagePanel.setImage(currentImage);
showFilename(selectedFile.getPath());
showStatus("File loaded.");
frame.pack();
}
private void close() {
currentImage = null;
imagePanel.clearImage();
showFilename(null);
}
private void quit() {
System.exit(0);
}
private void makeDarker() {
if (currentImage != null) {
currentImage.darker();
frame.repaint();
showStatus("Applied: darker");
} else {
showStatus("No image loaded");
}
}
private void makeLighter() {
if (currentImage != null) {
currentImage.lighter();
frame.repaint();
showStatus("Applied: lighter");
} else {
showStatus("No image loaded");
}
}
private void threshold() {
if(currentImage != null) {
currentImage.threshold();
frame.repaint();
showStatus("Applied: threshold");
} else {
showStatus("No image loaded");
}
}
private void showAbout() {
JOptionPane.showMessageDialog(
frame,
"ImageViewer\n",
VERSION,
JOptionPane.INFORMATION_MESSAGE
);
}
private void showFilename(String filename){
if(filename == null) {
filenameLabel.setText("No file displayed.");
} else {
filenameLabel.setText("File: " + filename);
}
}
private void showStatus(String text) {
statusLabel.setText(text);
}
private void makeFrame() {
frame = new JFrame("ImageViewer");
makeMenuBar(frame);
Container contentPane = frame.getContentPane();
contentPane.setLayout(new BorderLayout(6,6));
filenameLabel = new JLabel();
contentPane.add(filenameLabel, BorderLayout.NORTH);
imagePanel = new ImagePanel();
contentPane.add(imagePanel, BorderLayout.CENTER);
statusLabel = new JLabel();
contentPane.add(statusLabel, BorderLayout.SOUTH);
showFilename(null);
frame.pack();
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation(
d.width/2 - frame.getWidth()/2,
d.height/2 - frame.getHeight()/2
);
frame.setVisible(true);
}
private void makeMenuBar(JFrame frame) {
final int SHORTCUT_MASK =
Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
JMenuBar menubar = new JMenuBar();
frame.setJMenuBar(menubar);
JMenu menu;
JMenuItem item;
menu = new JMenu("File");
menubar.add(menu);
item = new JMenuItem("Open");
item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, SHORTCUT_MASK));
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {openFile();}
});
menu.add(item);
item = new JMenuItem("Close");
item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, SHORTCUT_MASK));
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {close();}
});
menu.add(item);
item = new JMenuItem("Quit");
item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, SHORTCUT_MASK));
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {quit();}
});
menu.add(item);
menu = new JMenu("Filter");
menubar.add(menu);
item = new JMenuItem("Darker");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {makeDarker();}
});
menu.add(item);
item = new JMenuItem("Lighter");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {makeLighter();}
});
menu.add(item);
item = new JMenuItem("Threshold");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {threshold();}
});
menu.add(item);
menu = new JMenu("Help");
menubar.add(menu);
item = new JMenuItem("About ImageViewer...");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {showAbout();}
});
menu.add(item);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new ImageViewer());
}
}
Kelas ImageViewer digunakan untuk menampilkan GUI dan memanipulasi gambar dengan menu pada GUI. Terdapat berbagai method seperti:
- openFile() untuk membuka menu untuk memilih file gambar.
- close() untuk menghilangkan tampilan gambar pada GUI.
- quit() untuk keluar dari program.
- makeDarker() atau makeLighter() untuk membuat gambar menjadi lebih gelap atau terang.
- makeThreshold() untuk menambah filter threshold pada gambar.
- showAbout() untuk melihat informasi program.
- showFilename() untuk menampilkan nama file gambar saat ini.
- showStatus() untuk menampilkan kondisi status program (apakah ada file yang dibuka atau tidak).
- makeFrame() untuk membuat panel GUI.
- makeMenuBar() untuk membuat tampilan menu utama program di bagian atas.
- main() untuk menjalankan program GUI.
Comments
Post a Comment