thomasfelix

PBO 7 (2)

Dec 5th, 2020 (edited)
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.26 KB | None | 0 0
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import java.awt.image.*;
  4. import javax.swing.*;
  5.  
  6. import java.io.File;
  7.  
  8. /**
  9.  * Class utama aplikasi yang berfungsi untuk build dan menampilkan GUI serta
  10.  * inisalisasi semua komponen class lainnya.
  11.  *
  12.  * @author Thomas Felix
  13.  * @version 5 Desember 2020
  14.  */
  15.  
  16. public class ImageViewer
  17. {
  18.     // Field static
  19.     private static final String VERSION = "Version 1.0";
  20.     private static JFileChooser fileChooser = new JFileChooser(System.getProperty("user.dir"));
  21.    
  22.     // Field
  23.     private JFrame frame;
  24.     private ImagePanel imagePanel;
  25.     private JLabel filenameLabel;
  26.     private JLabel statusLabel;
  27.     private OFImage currentImage;
  28.    
  29.     public ImageViewer()
  30.     {
  31.         currentImage = null;
  32.         makeFrame();
  33.     }
  34.    
  35.     // ---- Implementasi fungsi menu ----
  36.    
  37.     private void openFile()
  38.     {
  39.         int returnVal = fileChooser.showOpenDialog(frame);
  40.        
  41.         if (returnVal != JFileChooser.APPROVE_OPTION)
  42.         {
  43.             return; // Di-cancel
  44.         }
  45.        
  46.         File selectedFile = fileChooser.getSelectedFile();
  47.         currentImage = ImageFileManager.loadImage(selectedFile);
  48.        
  49.         if (currentImage == null) // Gambar tidak valid
  50.         {
  51.             JOptionPane.showMessageDialog(frame, "The file was not in a recognized image file format.",
  52.             "Image Load Error", JOptionPane.ERROR_MESSAGE);
  53.            
  54.             return;
  55.         }
  56.        
  57.         imagePanel.setImage(currentImage);
  58.         showFilename(selectedFile.getPath());
  59.         showStatus("File loaded.");
  60.         frame.pack();
  61.     }
  62.    
  63.     private void close()
  64.     {
  65.         currentImage = null;
  66.         imagePanel.clearImage();
  67.         showFilename(null);
  68.     }
  69.    
  70.     private void quit()
  71.     {
  72.         System.exit(0);
  73.     }
  74.    
  75.     private void makeDarker()
  76.     {
  77.         if (currentImage != null)
  78.         {
  79.             currentImage.darker();
  80.             frame.repaint();
  81.             showStatus("Applied: darker");
  82.         }
  83.        
  84.         else
  85.         {
  86.             showStatus("No image loaded.");
  87.         }
  88.     }
  89.    
  90.     private void makeLighter()
  91.     {
  92.         if (currentImage != null)
  93.         {
  94.             currentImage.lighter();
  95.             frame.repaint();
  96.             showStatus("Applied: lighter");
  97.         }
  98.        
  99.         else
  100.         {
  101.             showStatus("No image loaded.");
  102.         }
  103.     }
  104.    
  105.     private void threshold()
  106.     {
  107.         if (currentImage != null)
  108.         {
  109.             currentImage.threshold();
  110.             frame.repaint();
  111.             showStatus("Applied: threshold");
  112.         }
  113.        
  114.         else
  115.         {
  116.             showStatus("No image loaded.");
  117.         }
  118.     }
  119.    
  120.     private void showAbout()
  121.     {
  122.         JOptionPane.showMessageDialog(frame, "ImageViewer\n" + VERSION,
  123.         "About ImageViewer", JOptionPane.INFORMATION_MESSAGE);
  124.     }
  125.    
  126.     // ---- Method support ----
  127.    
  128.     private void showFilename(String filename)
  129.     {
  130.         if (filename == null)
  131.         {
  132.             filenameLabel.setText("No file displayed.");
  133.         }
  134.        
  135.         else
  136.         {
  137.             filenameLabel.setText("File: " + filename);
  138.         }
  139.     }
  140.    
  141.     private void showStatus(String text)
  142.     {
  143.         statusLabel.setText(text);
  144.     }
  145.    
  146.     // ---- Hal-hal yang dibutuhkan untuk build frame beserta semua komponennya ----
  147.    
  148.     private void makeFrame()
  149.     {
  150.         frame = new JFrame("ImageViewer");
  151.         makeMenuBar(frame);
  152.        
  153.         Container contentPane = frame.getContentPane();
  154.        
  155.         // Pengaturan layout
  156.         contentPane.setLayout(new BorderLayout(6, 6));
  157.        
  158.         filenameLabel = new JLabel();
  159.         contentPane.add(filenameLabel, BorderLayout.NORTH);
  160.        
  161.         imagePanel = new ImagePanel();
  162.         contentPane.add(imagePanel, BorderLayout.CENTER);
  163.        
  164.         statusLabel = new JLabel(VERSION);
  165.         contentPane.add(statusLabel, BorderLayout.SOUTH);
  166.        
  167.         // Mengatur dan menampilkan konten
  168.         showFilename(null);
  169.         frame.pack();
  170.        
  171.         Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
  172.         frame.setLocation(d.width / 2 - frame.getWidth() / 2, d.height / 2 - frame.getHeight() / 2);
  173.         frame.setVisible(true);
  174.     }
  175.    
  176.     private void makeMenuBar(JFrame frame)
  177.     {
  178.         final int SHORTCUT_MASK = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
  179.        
  180.         JMenuBar menubar = new JMenuBar();
  181.         frame.setJMenuBar(menubar);
  182.        
  183.         JMenu menu;
  184.         JMenuItem item;
  185.        
  186.         // Membuat menu File
  187.         menu = new JMenu("File");
  188.         menubar.add(menu);
  189.        
  190.         item = new JMenuItem("Open");
  191.             item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, SHORTCUT_MASK));
  192.             item.addActionListener(new ActionListener()
  193.             {
  194.                 public void actionPerformed(ActionEvent e)
  195.                 {
  196.                     openFile();
  197.                 }
  198.             });
  199.         menu.add(item);
  200.        
  201.         item = new JMenuItem("Close");
  202.             item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, SHORTCUT_MASK));
  203.             item.addActionListener(new ActionListener()
  204.             {
  205.                 public void actionPerformed(ActionEvent e)
  206.                 {
  207.                     close();
  208.                 }
  209.             });
  210.         menu.add(item);
  211.         menu.addSeparator();
  212.        
  213.         item = new JMenuItem("Quit");
  214.             item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, SHORTCUT_MASK));
  215.             item.addActionListener(new ActionListener()
  216.             {
  217.                 public void actionPerformed(ActionEvent e)
  218.                 {
  219.                     quit();
  220.                 }
  221.             });
  222.         menu.add(item);
  223.        
  224.         // Membuat menu Filter
  225.         menu = new JMenu("Filter");
  226.         menubar.add(menu);
  227.        
  228.         item = new JMenuItem("Darker");
  229.             item.addActionListener(new ActionListener()
  230.             {
  231.                 public void actionPerformed(ActionEvent e)
  232.                 {
  233.                     makeDarker();
  234.                 }
  235.             });
  236.         menu.add(item);
  237.        
  238.         item = new JMenuItem("Lighter");
  239.             item.addActionListener(new ActionListener()
  240.             {
  241.                 public void actionPerformed(ActionEvent e)
  242.                 {
  243.                     makeLighter();
  244.                 }
  245.             });
  246.         menu.add(item);
  247.        
  248.         item = new JMenuItem("Threshold");
  249.             item.addActionListener(new ActionListener()
  250.             {
  251.                 public void actionPerformed(ActionEvent e)
  252.                 {
  253.                     threshold();
  254.                 }
  255.             });
  256.         menu.add(item);
  257.        
  258.         // Membuat menu Help
  259.         menu = new JMenu("Help");
  260.         menubar.add(menu);
  261.        
  262.         item = new JMenuItem("About ImageViewer");
  263.             item.addActionListener(new ActionListener()
  264.             {
  265.                 public void actionPerformed(ActionEvent e)
  266.                 {
  267.                     showAbout();
  268.                 }
  269.             });
  270.         menu.add(item);
  271.     }
  272. }
Add Comment
Please, Sign In to add comment