3 Replies - 123799 Views - Last Post: 15 October 2013 - 02:53 PM

#1 Neon Tetras  Icon User is offline

  • New D.I.C Head

Reputation: 1
  • View blog
  • Posts: 6
  • Joined: 08-May 13

A simple Photo Viewer Application

Posted 15 October 2013 - 02:21 PM

Hi guys. I decided to post this simple Photo Viewer application.

It strictly for beginners and for the purpose of learning and can be improved.


/**
 *
 * @author Neon Tetras
 */
import java.awt.Image;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;

public class ImageViewer extends javax.swing.JFrame {

    /**
     * Class constructor: ImageViewer
     */
    public ImageViewer() {
        initComponents();
		
        listFiles(Path);//Lists all the files in the directory on window opening
		
        setLabelIcon(Path,filenames[position]); //sets the label to display the first
						//image in the directory on window opening.
        PreviousButton.setEnabled(false);
    }
	/**
	 *Initialize components
	 */
    private void initComponents() {
		setTitle("Image Viewer");
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setLayout(new java.awt.BorderLayout());// The layout is BorderLayout
		//setBorder(javax.swing.BorderFactory.createEtchedBorder());
        setBackground(java.awt.Color.GRAY);
		
        picLabel = new javax.swing.JLabel();		//Create the Label to display the picture
		picLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        picLabel.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
		
        PreviousButton = new javax.swing.JButton();
        PreviousButton.setText("Previous");
		PreviousButton.setIconTextGap(10); //Distance between the icon and text is 10
		
		PreviousButton.addActionListener(new java.awt.event.ActionListener() { //Register an actionListener for the PreviousButton
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                PreviousButtonActionPerformed(evt);
            }
        });
		
        NextButton = new javax.swing.JButton();
		NextButton.setPreferredSize(PreviousButton.getPreferredSize());
        NextButton.setText("Next");
		NextButton.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);
		NextButton.setIconTextGap(10); //Distance between the icon and text is 10
		
        NextButton.addActionListener(new java.awt.event.ActionListener() {  //Registers an actionListener for the NextButton
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                NextButtonActionPerformed(evt);
            }
        });

        javax.swing.Box vbox = javax.swing.Box.createVerticalBox(); //VerticalBox to hold the pictureLabel and the buttons
 
		vbox.add(javax.swing.Box.createVerticalStrut(30));
		vbox.add(picLabel);
		vbox.add(javax.swing.Box.createVerticalStrut(50));
		
		javax.swing.JPanel prev_next_pane = new javax.swing.JPanel(); //Panel to hold the Previous and Next buttons.
		
		java.awt.FlowLayout flow = new java.awt.FlowLayout(java.awt.FlowLayout.CENTER);
		flow.setHgap(30);
		prev_next_pane.setLayout(flow);
		
		prev_next_pane.add(PreviousButton);
		prev_next_pane.add(NextButton);
		prev_next_pane.setOpaque(false);
		
		vbox.add(prev_next_pane); //Add the panel to the verticalBox
		add(vbox);
		
	java.awt.Toolkit theKit = getToolkit();
    java.awt.Dimension size = theKit.getScreenSize();
	
	setLocation(size.width/5,size.height/10);
	setMinimumSize(new java.awt.Dimension(900,600));
	//setMaximumSize(new Dimension(size.width/4 +  50,size.height/4));

      //pack();
    }//END:initComponents
	
	/**
	 *Handler for previous button
	 */
    private void PreviousButtonActionPerformed(java.awt.event.ActionEvent evt) {
      position--;  //Decrement the index position of the array of filenames  by one on buttonPressed
      if(!NextButton.isEnabled()){		//if NextButton is
          NextButton.setEnabled(true);  //disabled, enable it
      }   
      if(position == 0){					//If we are viewing the first Picture in 
          PreviousButton.setEnabled(false); //the directory, disable previous button
		}   
		setLabelIcon(Path,filenames[position]); 
    }//End of PreviousButton handler
	
	/**
	 *Handler for NextButton
	 */
    private void NextButtonActionPerformed(java.awt.event.ActionEvent evt) {
       
      position++; //Increment the index position of array of filenames  by one on buttonPressed
		
        if(!PreviousButton.isEnabled()){
		listFiles(Path);
        PreviousButton.setEnabled(true);
        }
        if(position == filenames.length){
            NextButton.setEnabled(false);
			position --;
		return;
		}
       
        setLabelIcon(Path,filenames[position]);
            
    }//End of NextButton handler

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /*
         * Set the Nimbus look and feel
         */
        /*
         * If Nimbus (introduced in Java SE 6) is not available, stay with the
         * default look and feel. For details see
         * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(ImageViewer.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(ImageViewer.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(ImageViewer.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(ImageViewer.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
       

        /*
         * Create and display the form
         */
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new ImageViewer().setVisible(true);
            }
        });
    }
	
	/**Method to list all the files in the directory
	 *And store their names in an array
	 */
    private void listFiles(String Path){
    File file = new File(Path);
    filenames = file.list(); //store the file names in the array of strings.
	
	for(String names : filenames){
	System.out.println(names); //Print the filenames to the console just so you can see 
	}
   }
   
	//Method to set the picture on the label
     private void setLabelIcon(String Path,String name){
     File file = new File(Path+"\\"+name);
	java.awt.image.BufferedImage image = null;
	
	try{
	image = ImageIO.read(file); //Reas the image from the file.
	 }catch(IOException ie){
	javax.swing.JOptionPane.showMessageDialog(this,"Error reading image file","Error",
												javax.swing.JOptionPane.ERROR_MESSAGE);
	 }
	ImageIcon icon = new ImageIcon(image);
	int width = 600;
    int height = 400;
	Image img = icon.getImage().getScaledInstance(width,height,java.awt.Image.SCALE_SMOOTH); //Images produced will remain a fixed size, 600 * 400
	
	ImageIcon newIcon = new ImageIcon(img); //Create a new imageicon from an image object.
	
	//Now we want to create a caption for the pictures using their file names
    String pictureName = file.getName();
	int pos = pictureName.lastIndexOf("."); 	   //This removes the extensions 
   String caption = pictureName.substring(0,pos); //from the file names. e.g .gif, .jpg, .png
   picLabel.setIcon(newIcon);					//Set the imageIcon on the Label
   picLabel.setText(caption);					//Set the caption
   picLabel.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); //Caption appears below the image
   
     }
	 //Variables declaration
    int position = 0; //Initial position is 0
    String[] filenames; //Array to hold the file names
    final String Path = System.getProperty("user.home") +"\\user_name\\pictures\\"; //Directory path to your images
    private javax.swing.JButton NextButton;
    private javax.swing.JButton PreviousButton;
    private javax.swing.JLabel picLabel;
    // End of variables declaration
}//End of class

This post has been edited by modi123_1: 15 October 2013 - 02:25 PM
Reason for edit:: please use the 'code tag' button


Is This A Good Question/Topic? 0
  • +

Replies To: A simple Photo Viewer Application

#2 lordofduct  Icon User is offline

  • I'm a cheeseburger
  • member icon


Reputation: 2538
  • View blog
  • Posts: 4,641
  • Joined: 24-September 10

Re: A simple Photo Viewer Application

Posted 15 October 2013 - 02:24 PM

wrong forum, should be moved over to java forum
Was This Post Helpful? 0
  • +
  • -

#3 modi123_1  Icon User is online

  • Suitor #2
  • member icon



Reputation: 9584
  • View blog
  • Posts: 36,321
  • Joined: 12-June 08

Re: A simple Photo Viewer Application

Posted 15 October 2013 - 02:24 PM

A few things .. first use code tags. That is to say highlight your code text and click the 'code' button in the formatting bar..

Second.. if you want to share your project then the 'share your project' area is probably best for it.
Was This Post Helpful? 0
  • +
  • -

#4 Neon Tetras  Icon User is offline

  • New D.I.C Head

Reputation: 1
  • View blog
  • Posts: 6
  • Joined: 08-May 13

Re: A simple Photo Viewer Application

Posted 15 October 2013 - 02:53 PM

where can i find the "Share my project" area?

ok. i've seen it
Was This Post Helpful? 0
  • +
  • -

Page 1 of 1