Link to home
Start Free TrialLog in
Avatar of JoshuaJue
JoshuaJue

asked on

Example Program Gone Wrong

Hi I'm just learning java,

while going through core java 2 by sun microsystems press I had a problem with an example that is supposed to make a toolbar.  The funny thing is that the code compiles and runs but the icons don't show up. The toolbar is just a set of empty grey boxes. But they do function. Anyway I am using netbeans IDE version 3.6 the java version is version 2 (1.4.2) and the graphic files are in the same folder as the source.

Here is the code:

/**
 * @version 1.00 1999-07-17
 * @author Cay Horstmann
 */

import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import javax.swing.*;

public class ToolBarTest
{  public static void main(String[] args)
   {  JFrame frame = new ToolBarFrame();
      frame.show();
   }
}

/* the color action sets the background of its target to a
   given color
*/

class ColorAction extends AbstractAction
{  public ColorAction(String name, Icon icon,
      Color c, Component t)
   {  putValue(Action.NAME, name);
      putValue(Action.SMALL_ICON, icon);
      putValue(Action.SHORT_DESCRIPTION, name + " background");
      putValue("Color", c);
      target = t;
   }

   public void actionPerformed(ActionEvent evt)
   {  Color c = (Color)getValue("Color");
      target.setBackground(c);
      target.repaint();
   }

   private Component target;
}

/* the tool bar button is a button with an icon and no text
   suitable for addition into a tool bar. The tool tip is set
   to the short description of the action, or to the name
   if the short description is not available
*/

class ToolBarButton extends JButton
{  public ToolBarButton(Action a)
   {  super((Icon)a.getValue(Action.SMALL_ICON));

      String toolTip
         = (String)a.getValue(Action.SHORT_DESCRIPTION);
      if (toolTip == null)
         toolTip = (String)a.getValue(Action.NAME);
      if (toolTip != null)
         setToolTipText(toolTip);
      addActionListener(a);
   }
}

class ToolBarFrame extends JFrame
{  public ToolBarFrame()
   {  setTitle("ToolBarTest");
      setSize(300, 200);
      addWindowListener(new WindowAdapter()
         {  public void windowClosing(WindowEvent e)
            {  System.exit(0);
            }
         } );

      // add a panel for color change

      Container contentPane = getContentPane();
      JPanel panel = new JPanel();
      contentPane.add(panel, "Center");

      // set up actions

      Action blueAction = new ColorAction("Blue",
         new ImageIcon("blue-ball.gif"),
         Color.blue, panel);
      Action yellowAction = new ColorAction("Yellow",
         new ImageIcon("yellow-ball.gif"),
         Color.yellow, panel);
      Action redAction = new ColorAction("Red",
         new ImageIcon("red-ball.gif"),
         Color.red, panel);

      Action exitAction
         = new AbstractAction("Exit", new ImageIcon("exit.gif"))
            {  public void actionPerformed(ActionEvent event)
               {  System.exit(0);
               }
            };

      // populate tool bar

      JToolBar bar = new JToolBar();
      bar.add(new ToolBarButton(blueAction));
      bar.add(new ToolBarButton(yellowAction));
      bar.add(new ToolBarButton(redAction));
      bar.addSeparator();
      bar.add(new ToolBarButton(exitAction));
      contentPane.add(bar, "North");

      // populate menu

      JMenu menu = new JMenu("Color");
      menu.add(yellowAction);
      menu.add(blueAction);
      menu.add(redAction);
      menu.add(exitAction);
      JMenuBar menuBar = new JMenuBar();
      menuBar.add(menu);
      setJMenuBar(menuBar);
   }
}

Anyway if anyone knows why the graphics don't show up It is probobly something simple since I am a newbie.

Thanks
Josh
Avatar of TimYates
TimYates
Flag of United Kingdom of Great Britain and Northern Ireland image

have you got the images exit.gif, and red, yellow and blue-ball.gif?

In the same directory as the classes?
Avatar of JoshuaJue
JoshuaJue

ASKER

yes the images are in the same directory
SOLUTION
Avatar of zzynx
zzynx
Flag of Belgium image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
> new ImageIcon("c:/mydir/mydir2/blue-ball.gif")

*shudder* ;-)

>  yes the images are in the same directory

Ahhh...as the source?

Not the compiled classes?

That's your problem...  Images need to be where the classes are...
ok it works with a full path.  Should it normally work with just the file name if it is in the same directory as the class? And if it should why isn't it now?
> ok it works with a full path.

a) On windows.  On your machine.

> Should it normally work with just the file name if it is in the same directory as the class?

b) Yes, so long as the images are with the CLASS files, and not the JAVA files

> And if it should why isn't it now?

c) See (b) ;-)
ASKER CERTIFIED SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Ok glad it was an Ide thing and not a code thing. Frustrating to think you finally understand only to not have the code work.  I moved the images into the netbeans3.6/bin directory no luck.
Just for the heck of it I tried the netbeans3.6 directory and it worked. They should make netbeans smart enough to resolve links to native folders.

Thanks
Josh
>> I tried the netbeans3.6 directory and it worked
So, I didn't remember well ;°)

Thanks for accepting.

PS.
Tim's comment
>>b) Yes, so long as the images are with the CLASS files, and not the JAVA files
deserved a split.