/**
*kelas utama atau main class pada program ini,
*fungsi class ini yaitu menampilkan aplikasi GUI
*dan tampilan awal apllikasi
*
* @author Migel Aulia Mandiri Putra
* @version 0.1
*/
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
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();
}
// Fungsi Menu
// Fungsi openFile: Membuka file/ menampilkan gambar
private void openFile()
{
int returnVal = fileChooser.showOpenDialog(frame);
if(returnVal != JFileChooser.APPROVE_OPTION) return; // gagal
File selectedFile = fileChooser.getSelectedFile();
currentImage = ImageFileManager.loadImage(selectedFile);
if(currentImage == null)
{ // File gambar tidak sesuai format
JOptionPane.showMessageDialog(frame,
"Format File Salaj",
"Image Load Error",
JOptionPane.ERROR_MESSAGE);
return;
}
imagePanel.setImage(currentImage);
showFilename(selectedFile.getPath());
showStatus("File loaded.");
frame.pack();
}
// Fungsi close digunakan untuk menutup gambar
private void close()
{
currentImage = null;
imagePanel.clearImage();
showFilename(null);
}
// Fungsi quit digunakan untuk keluar dari program/ aplikasi
private void quit()
{
System.exit(0);
}
// Fungsi makeDarker digunakan sebagai filter pada gambar
// Membuat gambar menjadi gelap
private void makeDarker()
{
if(currentImage != null)
{
currentImage.darker();
frame.repaint();
showStatus("Applied: darker");
}
else
{
showStatus("No image loaded.");
}
}
// Fungsi makeLighter digunakan sebagai filter pada gambar
// Membuat gambar menjadi lebih terang
private void makeLighter()
{
if(currentImage != null)
{
currentImage.lighter();
frame.repaint();
showStatus("Applied: lighter");
}
else
{
showStatus("No image loaded.");
}
}
// Fungsi makeDarker digunakan sebagai filter pada gambar
// Menerapkan filter threshold pada gambar
private void threshold()
{
if(currentImage != null)
{
currentImage.threshold();
frame.repaint();
showStatus("Applied: threshold");
}
else
{
showStatus("No image loaded.");
}
}
// Fungsi showAbout digunakan untuk menampilkan informasi aplikasi
private void showAbout()
{
JOptionPane.showMessageDialog(frame,
"ImageViewer\\n" + VERSION,
"About ImageViewer",
JOptionPane.INFORMATION_MESSAGE);
}
// Method pendukung
/**
* Tampilkan nama file pada label.
* @param filename Nama file yang akan ditampilkan.
*/
private void showFilename(String filename)
{
if(filename == null)
{
filenameLabel.setText("No file displayed.");
}
else
{
filenameLabel.setText("File: " + filename);
}
}
/**
* Tampilkan status pada frame status bar.
* @param text Status yang akan ditampilkan.
*/
private void showStatus(String text)
{
statusLabel.setText(text);
}
// Digunkan untuk membangun frame dan komponennya
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(VERSION);
contentPane.add(statusLabel, BorderLayout.SOUTH);
// Menampilkan frame
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);
}
/**
* Membuat main frame\'s menu bar.
* @param frame Frame yang akan ditambahkan di menu bar.
*/
private void makeMenuBar(JFrame frame)
{
final int SHORTCUT_MASK = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
JMenuBar menubar = new JMenuBar();
frame.setJMenuBar(menubar);
JMenu menu;
JMenuItem item;
// Membuat menu File
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);
menu.addSeparator();
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);
// Membuat menu Filter
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);
// Membuat menu Help
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);
}
}