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_DESC RIPTION, name + " background");
putValue("Color", c);
target = t;
}
public void actionPerformed(ActionEven t 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(Act ion.SMALL_ ICON));
String toolTip
= (String)a.getValue(Action. SHORT_DESC RIPTION);
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(ActionEven t 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
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
putValue(Action.SHORT_DESC
putValue("Color", c);
target = t;
}
public void actionPerformed(ActionEven
{ 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(Act
String toolTip
= (String)a.getValue(Action.
if (toolTip == null)
toolTip = (String)a.getValue(Action.
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(ActionEven
{ 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
ASKER
yes the images are in the same directory
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
> 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...
*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...
ASKER
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) ;-)
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
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
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
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.
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.
In the same directory as the classes?