GUI

Edgar Andrew Hutauruk
05111740000166
PBO - B

















Class ImageViewer
  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();    
   }
   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,    
     "About ImageViewer",    
     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(VERSION);    
   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);    
   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);    
   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);    
   }    
  }    

Class ImagePanel
  import java.awt.*;    
  import javax.swing.*;    
  import java.awt.image.*;    
  /**    
  *    
  */    
  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()    
   {    
   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);    
   }    
   }    
  }    

Class 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(null) < 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;    
   }    
   }    
  }    

Class OFImage
  import java.awt.*;    
  import java.awt.image.*;    
  import javax.swing.*;    
  /**    
  *   
  */    
  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)    
   {    
   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.getBlue() + pixel.getGreen()) / 3;    
    if(brightness <= 85) {    
     setPixel(x, y, Color.BLACK);    
    }    
    else if(brightness <= 170) {    
     setPixel(x, y, Color.GRAY);    
    }    
    else {    
     setPixel(x, y, Color.WHITE);    
    }    
    }    
   }    
   }    
  }    

Komentar