document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. /**
  2.  * ImageViewer adalah main  class dari aplikasi image viewer. ini membangun dan
  3.  * menampilkan aplikasi GUI dan inisialisasi semua komponen lainnya.
  4.  * untuk memulai aplikasi ini, buat sebuah objek dari class ini
  5.  *
  6.  * @author Muhammad Bagus Istighfar
  7.  * @version 10 Desember 2020
  8.  */
  9.  
  10. import javax.swing.*;
  11. import java.awt.*;
  12. import java.awt.event.ActionEvent;
  13. import java.awt.event.ActionListener;
  14. import java.awt.event.KeyEvent;
  15. import java.io.File;
  16. public class ImageViewer
  17. {
  18.     // static fields:
  19.     private static final String VERSION = "Version 1.0";
  20.     private static JFileChooser fileChooser = new JFileChooser(System.getProperty("user.dir"));
  21.  
  22.     // fields:
  23.     private JFrame frame;
  24.     private JLabel filenameLabel;
  25.     private ImagePanel imagePanel;
  26.     private JLabel statusLabel;
  27.     private OFImage currentImage;
  28.  
  29.     /**
  30.      * membuat ImageViewer yang ditampilkan dilayar
  31.      */
  32.     public ImageViewer(){
  33.         currentImage = null;
  34.         makeFrame();
  35.     }
  36.     //    ------- implementasi fungsi menu --------
  37.     /**
  38.      * fungsi Open : membuka file chooser untuk memilih file gambar baru
  39.      */
  40.     private void openFile()
  41.     {
  42.         int returnVal = fileChooser.showOpenDialog(frame);
  43.         if(returnVal != JFileChooser.APPROVE_OPTION){
  44.             return; // dibatalkan
  45.         }
  46.         File selectedFile = fileChooser.getSelectedFile();
  47.         currentImage = ImageFileManager.loadImage(selectedFile);
  48.  
  49.         if(currentImage == null) // jika filenya invalid
  50.         {
  51.             JOptionPane.showMessageDialog(frame,
  52.                     "File gambar ini tidak dikenal",
  53.                     "Image Load Error",
  54.                     JOptionPane.ERROR_MESSAGE);
  55.             return;
  56.         }
  57.         imagePanel.setImage(currentImage);
  58.         showFilename(selectedFile.getPath());
  59.         showStatus("File Loaded.");
  60.         frame.pack();
  61.     }
  62.  
  63.     /**
  64.      * fungsi close : menutup gambar sekarang
  65.      */
  66.     private void  close(){
  67.         currentImage = null;
  68.         imagePanel.clearImage();
  69.         showFilename(null);
  70.     }
  71.  
  72.     /**
  73.      * fungsi Quit : untuk keluar aplikasi
  74.      */
  75.     private void quit(){
  76.         System.exit(0);
  77.     }
  78.  
  79.     /**
  80.      * fungsi darker : untuk membuat gambar lebih gelap
  81.      */
  82.     private void makeDarker(){
  83.         if(currentImage !=null){
  84.             currentImage.darker();
  85.             frame.repaint();
  86.             showStatus("Applied : Darker");
  87.         }else{
  88.             showStatus("Tidak ada gambar yang dimasukkan");
  89.         }
  90.     }
  91.  
  92.     /**
  93.      * fungsi Lighter : untuk membuat gambar lebih terang dari masa depanmu
  94.      */
  95.     private void makeLighter(){
  96.         if(currentImage !=null){
  97.             currentImage.lighter();
  98.             frame.repaint();
  99.             showStatus("Applied : Lighter");
  100.         }else{
  101.             showStatus("Tidak ada gambar yang dimasukkan");
  102.         }
  103.     }
  104.  
  105.     /**
  106.      * fungsi threshold : memakai filter threshold
  107.      */
  108.     private void threshold(){
  109.         if(currentImage !=null){
  110.             currentImage.threshold();
  111.             frame.repaint();
  112.             showStatus("Applied : Threshold");
  113.         }else{
  114.             showStatus("Tidak ada gambar yang dimasukkan");
  115.         }
  116.     }
  117.  
  118.     /**
  119.      * fungsi About : menunjukan informasi tentang aplikasi ini
  120.      */
  121.     private  void showAbout(){
  122.         JOptionPane.showMessageDialog(frame,
  123.                 "Image Viewer\\n" + VERSION,
  124.                 "About Image Viewer",
  125.                 JOptionPane.INFORMATION_MESSAGE);
  126.     }
  127. //    ----- Support Methods -----
  128.  
  129.     /**
  130.      * Menunjukkan nama file pada tabel yang sesuai
  131.      * @param filename nama file yang akan ditampilkan
  132.      */
  133.     private void showFilename(String filename){
  134.         if(filename == null){
  135.             filenameLabel.setText("Tidak ada file yang ditampilkan");
  136.         }
  137.         else {
  138.             filenameLabel.setText("File: " + filename);
  139.         }
  140.     }
  141.  
  142.     /**
  143.      * menampilkan pesan status pada frame status bar
  144.      * @param text pesan status yang akan ditampilkan
  145.      */
  146.     private void showStatus(String text){
  147.         statusLabel.setText(text);
  148.     }
  149.  
  150.     /**
  151.      * membuat Swing Frame dan  kontennya
  152.      */
  153.     private void makeFrame()
  154.     {
  155.         frame = new JFrame("Image Viewer");
  156.         makeMenuBar(frame);
  157.  
  158.         Container contentPane = frame.getContentPane();
  159.  
  160.         //tentukan pengelola tata letak dengan jarak yang bagus
  161.         contentPane.setLayout(new BorderLayout(10,10));
  162.  
  163.         filenameLabel = new JLabel();
  164.         contentPane.add(filenameLabel, BorderLayout.NORTH);
  165.  
  166.         imagePanel = new ImagePanel();
  167.         contentPane.add(imagePanel, BorderLayout.CENTER);
  168.  
  169.         statusLabel = new JLabel(VERSION);
  170.         contentPane.add(statusLabel, BorderLayout. SOUTH);
  171.  
  172.         //Sudah selesai di-Build -- Atur komponen dan penampilan
  173.         showFilename(null);
  174.         frame.pack();
  175.         Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
  176.         frame.setLocation(d.width/2 - frame.getWidth()/2,
  177.                 d.height/2 - frame.getHeight()/2);
  178.  
  179.         frame.setVisible(true);
  180.     }
  181.  
  182.     private void makeMenuBar(JFrame frame){
  183.         final int SHORTCUT_MASK =
  184.                 Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
  185.         JMenuBar menubar = new JMenuBar();
  186.         frame.setJMenuBar(menubar);
  187.  
  188.         JMenu menu;
  189.         JMenuItem item;
  190.  
  191.         // membuat menu File
  192.         menu = new JMenu("File");
  193.         menubar.add(menu);
  194.  
  195.         item = new JMenuItem("Open");
  196.         item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, SHORTCUT_MASK));
  197.         item.addActionListener(new ActionListener() {
  198.             @Override
  199.             public void actionPerformed(ActionEvent e) {
  200.                 openFile();
  201.             }
  202.         });
  203.         menu.add(item);
  204.  
  205.         item = new JMenuItem("Close");
  206.         item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, SHORTCUT_MASK));
  207.         item.addActionListener(new ActionListener() {
  208.             @Override
  209.             public void actionPerformed(ActionEvent e) {
  210.                 close();
  211.             }
  212.         });
  213.         menu.add(item);
  214.         menu.addSeparator();
  215.  
  216.         item = new JMenuItem("Quit");
  217.         item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, SHORTCUT_MASK));
  218.         item.addActionListener(new ActionListener() {
  219.             @Override
  220.             public void actionPerformed(ActionEvent e) {
  221.                 quit();
  222.             }
  223.         });
  224.         menu.add(item);
  225.  
  226.         // membuat menu filter
  227.         menu = new JMenu("Filter");
  228.         menubar.add(menu);
  229.  
  230.         item = new JMenuItem("Darker");
  231.         item.addActionListener(new ActionListener() {
  232.             @Override
  233.             public void actionPerformed(ActionEvent e) {
  234.                 makeDarker();
  235.             }
  236.         });
  237.         menu.add(item);
  238.  
  239.         item = new JMenuItem("Lighter");
  240.         item.addActionListener(new ActionListener() {
  241.             @Override
  242.             public void actionPerformed(ActionEvent e) {
  243.                 makeLighter();
  244.             }
  245.         });
  246.         menu.add(item);
  247.  
  248.         item = new JMenuItem("Threshold");
  249.         item.addActionListener(new ActionListener() {
  250.             @Override
  251.             public void actionPerformed(ActionEvent e) {
  252.                 threshold();
  253.             }
  254.         });
  255.         menu.add(item);
  256.  
  257.         // membuat menu Help
  258.         menu = new JMenu("Help");
  259.         menubar.add(menu);
  260.  
  261.         item = new JMenuItem("Tentang Image Viewer...");
  262.         item.addActionListener(new ActionListener() {
  263.             @Override
  264.             public void actionPerformed(ActionEvent e) {
  265.                 showAbout();
  266.             }
  267.         });
  268.         menu.add(item);
  269.     }
  270. }
  271.  
');