Results 1 to 7 of 7
  1. #1
    angeltiner is offline Member
    Join Date
    Apr 2010
    Posts
    4
    Rep Power
    0

    Unhappy Help i am so confused..:(

    i am really new to this and have spent like 5 sleepless nights trying to do this.
    basically what i am trying to do is disable menu functions when no image is loaded. i have so far done it to be disabled but it does not come back again when a image is loaded.
    i have pasted my code below and would appreciate help with this please. Thanks


    import java.awt.*;
    import java.awt.event.*;
    import java.awt.image.*;

    import javax.imageio.ImageIO;
    import javax.swing.*;
    import javax.swing.border.*;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JMenuItem;

    import java.io.File;
    import javax.swing.JScrollPane;
    import java.util.List;
    import java.util.ArrayList;
    import java.util.Iterator;

    /**
    * ImageViewer is the main class of the image viewer application. It builds and
    * displays the application GUI and initialises all other components.
    *
    * To start the application, create an object of this class.
    *
    * @author Michael Kolling and David J Barnes
    * @version 3.1
    */
    public class ImageViewer
    {
    // static fields:
    private static final String VERSION = "Version 3.1";
    private static JFileChooser fileChooser = new JFileChooser(System.getProperty("user.dir"));

    // fields:
    private JFrame frame;
    private ImagePanel imagePanel;
    private JLabel filenameLabel;
    private JLabel statusLabel;
    private JButton smallerButton;
    private JButton largerButton;
    private JButton undo;
    private JButton redo;
    private JMenuItem item;
    private JMenu menu;
    private JMenu menubar;
    private OFImage currentImage;
    public JScrollBar scrollBar;
    public JScrollPane scrollPane;
    private List<Filter> filters;
    private List<Functions>functions;

    /**
    * Create an ImageViewer and display its GUI on screen.
    */
    public ImageViewer()
    {
    filters = createFilters();
    functions = createFunctions();

    makeFrame();
    }



    // ---- implementation of menu functions ----



    /**
    * Open function: open a file chooser to select a new image file,
    * and then display the chosen image.
    */
    private void openFile()
    {
    int returnVal = fileChooser.showOpenDialog(frame);

    if(returnVal != JFileChooser.APPROVE_OPTION) {
    return; // cancelled
    }
    File selectedFile = fileChooser.getSelectedFile();
    currentImage = ImageFileManager.loadImage(selectedFile);

    if(currentImage == null) { // image file was not a valid image
    JOptionPane.showMessageDialog(frame,
    "The file was not in a recognized image file format.",
    "Image Load Error",
    JOptionPane.ERROR_MESSAGE);
    return;
    }

    imagePanel.setImage(currentImage);
    setButtonsEnabled(true);
    setMenuItemsEnabled(true);
    showFilename(selectedFile.getPath());
    showStatus("File loaded.");
    frame.pack();
    }


    /**
    * Close function: close the current image.
    */
    private void close()
    {
    currentImage = null;
    imagePanel.clearImage();
    showFilename(null);
    setButtonsEnabled(false);
    }
    /**
    * Save As function: save the current image to a file.
    */
    private void saveAs()
    {
    if(currentImage != null) {
    int returnVal = fileChooser.showSaveDialog(frame);

    if(returnVal != JFileChooser.APPROVE_OPTION) {
    return; // cancelled
    }
    File selectedFile = fileChooser.getSelectedFile();
    ImageFileManager.saveImage(currentImage, selectedFile);

    showFilename(selectedFile.getPath());
    }
    }

    /**
    * Quit function: quit the application.
    */
    private void quit()
    {
    System.exit(0);
    }

    /**
    * Apply a given filter to the current image.
    *
    * @param filter The filter object to be applied.
    */
    private void applyFilter(Filter filter)
    {
    if(currentImage != null) {
    filter.apply(currentImage);
    frame.repaint();
    showStatus("Applied: " + filter.getName());
    }
    else {
    showStatus("No image loaded.");
    }
    }

    /**
    * 'About' function: show the 'about' box.
    */
    private void applyFunctions(Functions function){

    if(currentImage != null) {
    function.apply(currentImage);
    frame.repaint();
    showStatus("Applied: " + function.getName());
    }
    else {
    showStatus("No image loaded.");
    }
    }
    private void showAbout()
    {
    JOptionPane.showMessageDialog(frame,
    "ImageViewer\n" + VERSION,
    "About ImageViewer",
    JOptionPane.INFORMATION_MESSAGE);
    }

    /**
    * Make the current picture larger.
    */
    private void makeLarger()
    {
    if(currentImage != null) {
    // create new image with double size
    int width = currentImage.getWidth();
    int height = currentImage.getHeight();
    OFImage newImage = new OFImage(width * 2, height * 2);

    // copy pixel data into new image
    for(int y = 0; y < height; y++) {
    for(int x = 0; x < width; x++) {
    Color col = currentImage.getPixel(x, y);
    newImage.setPixel(x * 2, y * 2, col);
    newImage.setPixel(x * 2 + 1, y * 2, col);
    newImage.setPixel(x * 2, y * 2 + 1, col);
    newImage.setPixel(x * 2+1, y * 2 + 1, col);
    }
    }

    currentImage = newImage;
    imagePanel.setImage(currentImage);
    frame.pack();
    }
    }


    /**
    * Make the current picture smaller.
    */
    private void makeSmaller()
    {
    if(currentImage != null) {
    // create new image with double size
    int width = currentImage.getWidth() / 2;
    int height = currentImage.getHeight() / 2;
    OFImage newImage = new OFImage(width, height);

    // copy pixel data into new image
    for(int y = 0; y < height; y++) {
    for(int x = 0; x < width; x++) {
    newImage.setPixel(x, y, currentImage.getPixel(x * 2, y * 2));
    }
    }

    currentImage = newImage;
    imagePanel.setImage(currentImage);
    frame.pack();
    }
    }



    // ---- support methods ----

    /**
    * Show the file name of the current image in the fils display label.
    * 'null' may be used as a parameter if no file is currently loaded.
    *
    * @param filename The file name to be displayed, or null for 'no file'.
    */
    private void showFilename(String filename)
    {
    if(filename == null) {
    filenameLabel.setText("No file displayed.");
    }
    else {
    filenameLabel.setText("File: " + filename);
    }
    }


    /**
    * Show a message in the status bar at the bottom of the screen.
    * @param text The status message.
    */
    private void showStatus(String text)
    {
    statusLabel.setText(text);
    }


    /**
    * Enable or disable all toolbar buttons.
    *
    * @param status 'true' to enable the buttons, 'false' to disable.
    */
    private void setButtonsEnabled(boolean status)
    {
    smallerButton.setEnabled(status);
    largerButton.setEnabled(status);
    }


    /**
    * Create a list with all the known filters.
    * @return The list of filters.
    */
    private List<Filter> createFilters()
    {

    List<Filter> filterList = new ArrayList<Filter>();
    filterList.add(new DarkerFilter("Darker"));
    filterList.add(new LighterFilter("Lighter"));
    filterList.add(new ThresholdFilter("Threshold"));
    filterList.add(new InvertFilter("Invert"));
    filterList.add(new SolarizeFilter("Solarize"));
    filterList.add(new SmoothFilter("Smooth"));
    filterList.add(new PixelizeFilter("Pixelize"));
    filterList.add(new MirrorFilter("Mirror"));
    filterList.add(new GrayScaleFilter("Grayscale"));
    filterList.add(new EdgeFilter("Edge Detection"));
    filterList.add(new FishEyeFilter("Fish Eye"));

    return filterList;
    }


    // ---- Swing stuff to build the frame and all its components and menus ----
    private List<Functions> createFunctions()
    {
    List<Functions> functionList = new ArrayList<Functions>();
    functionList.add(new UndoFunctions("Undo"));
    functionList.add(new RedoFunctions("Redo"));
    functionList.add(new ReloadFunctions("Reload"));
    functionList.add(new RotateFunctions("Rotate"));
    functionList.add(new CropFunctions("Crop"));
    return functionList;
    }

    /**
    * Create the Swing frame and its content.
    */


    private void makeFrame()
    {
    frame = new JFrame("ImageViewer");
    JPanel contentPane = (JPanel)frame.getContentPane();
    contentPane.setBorder(new EmptyBorder(6, 6, 6, 6));

    makeMenuBar(frame);

    // Specify the layout manager with nice spacing
    contentPane.setLayout(new BorderLayout(6, 6));

    // Create the image pane in the center
    imagePanel = new ImagePanel();
    imagePanel.setBorder(new EtchedBorder());
    contentPane.add(imagePanel, BorderLayout.CENTER);

    // Create two labels at top and bottom for the file name and status messages
    filenameLabel = new JLabel();
    contentPane.add(filenameLabel, BorderLayout.NORTH);

    statusLabel = new JLabel(VERSION);
    contentPane.add(statusLabel, BorderLayout.SOUTH);

    // Create the toolbar with the buttons
    JPanel toolbar = new JPanel();
    toolbar.setLayout(new GridLayout(0, 1));

    smallerButton = new JButton("Smaller");
    smallerButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) { makeSmaller(); }
    });
    toolbar.add(smallerButton);

    largerButton = new JButton("Larger");
    largerButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) { makeLarger(); }
    });
    toolbar.add(largerButton);

    // Add toolbar into panel with flow layout for spacing
    JPanel flow = new JPanel();
    flow.add(toolbar);

    contentPane.add(flow, BorderLayout.WEST);

    // building is done - arrange the components
    showFilename(null);
    setButtonsEnabled(false);
    frame.pack();

    // place the frame at the center of the screen and show
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    frame.setLocation(d.width/2 - frame.getWidth()/2, d.height/2 - frame.getHeight()/2);
    frame.setVisible(true);
    }

    /**
    * Create the main frame's menu bar.
    *
    * @param frame The frame that the menu bar should be added to.
    */


    private void makeMenuBar(JFrame frame)
    {

    final int SHORTCUT_MASK =
    Toolkit.getDefaultToolkit().getMenuShortcutKeyMask ();

    JMenuBar menubar = new JMenuBar();
    frame.setJMenuBar(menubar);

    JMenu menu ;
    JMenuItem item = null;


    // create the File menu
    menu = new JMenu("File");
    menubar.add(menu);


    item = new JMenuItem("Open...");
    item.setAccelerator(KeyStroke.getKeyStroke(KeyEven t.VK_O, SHORTCUT_MASK));
    item.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) { openFile(); }
    });
    menu.add(item);

    item = new JMenuItem("Close");
    if(currentImage == null) {
    item.setEnabled(false);
    item.setAccelerator(KeyStroke.getKeyStroke(KeyEven t.VK_W, SHORTCUT_MASK));
    item.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) { close(); }
    });
    menu.add(item);
    menu.addSeparator();



    item = new JMenuItem("Save As...");
    if(currentImage == null) {
    item.setEnabled(false);
    item.setAccelerator(KeyStroke.getKeyStroke(KeyEven t.VK_S, SHORTCUT_MASK));
    item.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) { saveAs(); }
    });
    menu.add(item);
    menu.addSeparator();

    item = new JMenuItem("Quit");
    item.setAccelerator(KeyStroke.getKeyStroke(KeyEven t.VK_Q, SHORTCUT_MASK));
    item.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) { quit(); }
    });
    menu.add(item);


    // create the Filter menu
    menu = new JMenu("Filter");

    menubar.add(menu);
    if(currentImage == null) {
    menu.setEnabled(false);

    for(final Filter filter : filters) {
    item = new JMenuItem(filter.getName());
    item.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    applyFilter(filter);
    }
    });
    menu.add(item);
    }

    menu = new JMenu("Functions");
    menubar.add(menu);
    if(currentImage == null) {
    menu.setEnabled(false);
    for(final Functions function : functions) {
    item = new JMenuItem(function.getName());
    item.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    applyFunctions(function);
    }
    });
    menu.add(item);
    }


    // create the Help menu
    menu = new JMenu("Help");
    menubar.add(menu);
    if(currentImage == null) {
    menu.setEnabled(false);
    item = new JMenuItem("About ImageViewer...");
    item.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) { showAbout(); }
    });
    menu.add(item);
    }
    }
    }
    }
    }
    }

    private void setMenuItemsEnabled(boolean status) {
    item.setEnabled(status);
    menu.setEnabled(status);



    }
    }

  2. #2
    Michael Dunn is offline Member
    Join Date
    Jul 2008
    Posts
    62
    Rep Power
    0

    Default

    > Help i am so confused..:(

    as are we.

    you post 500 lines of code that someone else wrote,
    it doesn't compile,
    it's not formatted so it can be 'easy on the eyes'

    and you want us to fix it??

    try again:
    reduce it - to the problem area
    make sure it compiles and runs
    use the code tags

  3. #3
    angeltiner is offline Member
    Join Date
    Apr 2010
    Posts
    4
    Rep Power
    0

    Default

    Quote Originally Posted by Michael Dunn View Post
    > Help i am so confused..:(

    as are we.

    you post 500 lines of code that someone else wrote,
    it doesn't compile,
    it's not formatted so it can be 'easy on the eyes'

    and you want us to fix it??

    try again:
    reduce it - to the problem area
    make sure it compiles and runs
    use the code tags


    sorry i am so new to this
    i have just tried the program now and it compiles and yes most of the code i did not write as i am just trying to extend the code..
    this is the problem area

    private void makeMenuBar(JFrame frame)
    {

    final int SHORTCUT_MASK =
    Toolkit.getDefaultToolkit().getMenuShortcutKeyMask ();

    JMenuBar menubar = new JMenuBar();
    frame.setJMenuBar(menubar);

    JMenu menu ;
    JMenuItem item = null;


    // create the File menu
    menu = new JMenu("File");
    menubar.add(menu);


    item = new JMenuItem("Open...");
    item.setAccelerator(KeyStroke.getKeyStroke(KeyEven t.VK_O, SHORTCUT_MASK));
    item.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) { openFile(); }
    });
    menu.add(item);

    item = new JMenuItem("Close");
    if(currentImage == null) {
    item.setEnabled(false);
    item.setAccelerator(KeyStroke.getKeyStroke(KeyEven t.VK_W, SHORTCUT_MASK));
    item.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) { close(); }
    });
    menu.add(item);
    menu.addSeparator();



    item = new JMenuItem("Save As...");
    if(currentImage == null) {
    item.setEnabled(false);
    item.setAccelerator(KeyStroke.getKeyStroke(KeyEven t.VK_S, SHORTCUT_MASK));
    item.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) { saveAs(); }
    });
    menu.add(item);
    menu.addSeparator();

    item = new JMenuItem("Quit");
    item.setAccelerator(KeyStroke.getKeyStroke(KeyEven t.VK_Q, SHORTCUT_MASK));
    item.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) { quit(); }
    });
    menu.add(item);


    // create the Filter menu
    menu = new JMenu("Filter");

    menubar.add(menu);
    if(currentImage == null) {
    menu.setEnabled(false);

    for(final Filter filter : filters) {
    item = new JMenuItem(filter.getName());
    item.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    applyFilter(filter);
    }
    });
    menu.add(item);
    }

    menu = new JMenu("Functions");
    menubar.add(menu);
    if(currentImage == null) {
    menu.setEnabled(false);
    for(final Functions function : functions) {
    item = new JMenuItem(function.getName());
    item.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    applyFunctions(function);
    }
    });
    menu.add(item);
    }


    // create the Help menu
    menu = new JMenu("Help");
    menubar.add(menu);
    if(currentImage == null) {
    menu.setEnabled(false);
    item = new JMenuItem("About ImageViewer...");
    item.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) { showAbout(); }
    });
    menu.add(item);
    }
    }
    }
    }
    }
    }

    private void setMenuItemsEnabled(boolean status) {
    item.setEnabled(status);
    menu.setEnabled(status);



    }

    i am trying to disable this menu so that when the open function is called and an image is loaded, the menu becomes enabled

    private void openFile()
    {
    int returnVal = fileChooser.showOpenDialog(frame);

    if(returnVal != JFileChooser.APPROVE_OPTION) {
    return; // cancelled
    }
    File selectedFile = fileChooser.getSelectedFile();
    currentImage = ImageFileManager.loadImage(selectedFile);

    if(currentImage == null) { // image file was not a valid image
    JOptionPane.showMessageDialog(frame,
    "The file was not in a recognized image file format.",
    "Image Load Error",
    JOptionPane.ERROR_MESSAGE);
    return;
    }

    imagePanel.setImage(currentImage);
    setButtonsEnabled(true);
    setMenuItemsEnabled(true);
    showFilename(selectedFile.getPath());
    showStatus("File loaded.");
    frame.pack();
    }

    i am just confused how to go about this as this is my first project to do
    thanks,
    }

  4. #4
    Fubarable's Avatar
    Fubarable is offline Moderator
    Join Date
    Jun 2008
    Posts
    19,316
    Blog Entries
    1
    Rep Power
    26

    Default

    Please use code tags as Michael recommended above. Please see the link in my signature below to see how to do this.
    Last edited by Fubarable; 04-10-2010 at 01:50 PM.

  5. #5
    angeltiner is offline Member
    Join Date
    Apr 2010
    Posts
    4
    Rep Power
    0

    Default

    heres the code with code tags as suggested:
    Java Code:
     private void makeMenuBar(JFrame frame)
        {
        	 
            final int SHORTCUT_MASK =
                Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
           
            JMenuBar menubar = new JMenuBar();
            frame.setJMenuBar(menubar);
        
            JMenu menu  ;
            JMenuItem item = null;
            
           
            // create the File menu
            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");	
            if(currentImage == null) {
            	item.setEnabled(false);
                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("Save As...");
            if(currentImage == null) {
            	item.setEnabled(false);
                item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, SHORTCUT_MASK));
                item.addActionListener(new ActionListener() {
                                   public void actionPerformed(ActionEvent e) { saveAs(); }
                               });
            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);
    
    
            // create the Filter menu
            menu = new JMenu("Filter");
            
            menubar.add(menu);
            if(currentImage == null) {
            	menu.setEnabled(false);
            
            for(final Filter filter : filters) {
                item = new JMenuItem(filter.getName());
                item.addActionListener(new ActionListener() {
                                    public void actionPerformed(ActionEvent e) { 
                                        applyFilter(filter);
                                    }
                               });
                 menu.add(item);
            }
           
            menu = new JMenu("Functions");
            menubar.add(menu);
            if(currentImage == null) {
            	menu.setEnabled(false);
            for(final Functions function : functions) {
                item = new JMenuItem(function.getName());
                item.addActionListener(new ActionListener() {
                                    public void actionPerformed(ActionEvent e) { 
                                        applyFunctions(function);
                                    }
                               });
                 menu.add(item);
             }
      
         
            // create the Help menu
            menu = new JMenu("Help");
            menubar.add(menu);	
            if(currentImage == null) {
            	menu.setEnabled(false);
            item = new JMenuItem("About ImageViewer...");
                item.addActionListener(new ActionListener() {
                                   public void actionPerformed(ActionEvent e) { showAbout(); }
                               });
            menu.add(item);
            }
            }
        }
        }
        }
        }
       
    	private void setMenuItemsEnabled(boolean status) {
    		item.setEnabled(status);
    		menu.setEnabled(status);
    	  
    
    
    }
        }
    hope this works :(

  6. #6
    angeltiner is offline Member
    Join Date
    Apr 2010
    Posts
    4
    Rep Power
    0

    Default

    i am trying to set the menu to be disabled when theres no image selected and when i run it its disabled but when an image is opened or loaded, its still disabled, thats where im getting it all mixed up and im a novist at programs.
    here is the code for the load image
    Java Code:
    private void openFile()
        {
            int returnVal = fileChooser.showOpenDialog(frame);
    
            if(returnVal != JFileChooser.APPROVE_OPTION) {
                return;  // cancelled
            }
            File selectedFile = fileChooser.getSelectedFile();
            currentImage = ImageFileManager.loadImage(selectedFile);
            
            if(currentImage == null) {   // image file was not a valid image
                JOptionPane.showMessageDialog(frame,
                        "The file was not in a recognized image file format.",
                        "Image Load Error",
                        JOptionPane.ERROR_MESSAGE);
                return;
            }
    
            imagePanel.setImage(currentImage);
            setButtonsEnabled(true);
            setMenuItemsEnabled(true);
            showFilename(selectedFile.getPath());
            showStatus("File loaded.");
            frame.pack();
        	}

  7. #7
    Michael Dunn is offline Member
    Join Date
    Jul 2008
    Posts
    62
    Rep Power
    0

    Default

    I can't compile and run the code to test, but I'd imagine all you'd need to do
    is add the indicated line, in openFile(), if they are the menu items you're having
    difficulty with

    Java Code:
    if(currentImage == null) {   // image file was not a valid image
        setMenuItemsEnabled(false);//<-----------------------------------
        JOptionPane.showMessageDialog(frame,
                "The file was not in a recognized image file format.",
                "Image Load Error",
                JOptionPane.ERROR_MESSAGE);
        return;
    }

Similar Threads

  1. Very confused Plz help!!
    By ratb0y in forum NetBeans
    Replies: 0
    Last Post: 02-14-2009, 04:34 PM
  2. Confused
    By coldfire in forum New To Java
    Replies: 3
    Last Post: 01-13-2009, 01:00 PM
  3. confused
    By updev in forum AWT / Swing
    Replies: 6
    Last Post: 11-14-2008, 03:33 PM
  4. a lot confused
    By vineethraj in forum New To Java
    Replies: 4
    Last Post: 01-18-2008, 12:36 AM
  5. what does it mean:confused:
    By sivasayanth in forum New To Java
    Replies: 2
    Last Post: 01-12-2008, 04:52 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •