?
Solved

Setting icons in my MenuBar

Posted on 2004-08-29
6
Medium Priority
?
527 Views
Last Modified: 2012-06-22
Hi all,

I want to be able to have a jpeg icon on my menu's in my game could you please provide a solution as to how I can do this

My code for my game is:

import java.awt.*;
import java.awt.event.*;
import java.awt.* ;
import java.awt.event.* ;
import java.awt.image.* ;
import javax.imageio.* ;
import java.io.* ;
import javax.swing.* ;
import java.util.*;
import java.applet.AudioClip;
import java.applet.Applet;
import java.net.URL;

public class JaySnake extends JFrame implements ActionListener
{
  class Game extends JPanel implements Runnable
  {
        private BufferedImage backBuffer ;
    private Graphics myBackBuffer ;
   
/*The HashMap  class is roughly equivalent to Hashtable,
 *except that it is unsynchronized and permits nulls*/
    HashMap imageMap = new HashMap(4);
     public int waitTime = 65;

/*Method used to get text from background menu items and set background image from that*/
     public void setImage(String fileName) throws Exception
     {
          if (fileName.equals("backgrounds/default")) //Sets background to default image
          {
                    backgroundImage = ImageIO.read( new File( "backgrounds/default.jpg" ) );
         }
         else if (fileName.equals("Long grass")) //Sets background to longGrass image
         {
                   backgroundImage = ImageIO.read( new File( "backgrounds/longGrass.jpg" ) );
         }
         else if (fileName.equals("Yellow Sand"))//Sets background to sand image
         {
                  backgroundImage = ImageIO.read( new File( "backgrounds/sand.jpg" ) );
         }
         
         else if (fileName.equals("Blue Glass")) //Sets background to blueGrass image
         {
                  backgroundImage = ImageIO.read( new File( "backgrounds/blueGlass.jpg" ) );
         }
         else //Sets to default if none mathced
         {
                   backgroundImage = ImageIO.read( new File( "backgrounds/default.jpg" ) );
         }
     }
     
    public Game()
    {

  /******Try read in default backgroundImage file and catch any exception*/
      try //first read in default image
      {
            backgroundImage = ImageIO.read( new File( "backgrounds/default.jpg" ) );
            clip = Applet.newAudioClip(new URL("file:" + System.getProperty("user.dir") + "/sounds/music.au"));
            appleEaten = Applet.newAudioClip(new URL("file:" + System.getProperty("user.dir") + "/sounds/apple.au"));
      }
      catch( IOException e )
      {
        System.out.println(e) ;
      }
     
      backBuffer = new BufferedImage( DISPLAY_W, DISPLAY_H, BufferedImage.TYPE_INT_RGB ) ;
      myBackBuffer = backBuffer.getGraphics() ;

//set up the menubar
      menubar = new JMenuBar();
      setJMenuBar(menubar);

    }

    public void paintComponent( Graphics g )
    {
      g.drawImage( backBuffer, DISPLAY_X, DISPLAY_Y, null ) ;
    }

     public void paint( Graphics g )
    {          
            super.paint(g);
        g.drawImage(backgroundImage,0,0,null);

          //Draw green scoreboard and black rects
        g.setColor(Color.black);
        g.fillRect(1,540,598,20);
        g.fillRect(1,34,598,6);
        g.setColor(Color.white);
        g.drawRoundRect(1,0,598,32,10,10);

          //Calls Snake paint method
          if (snake != null)
             snake.draw(g);
                  
    }
   
    public void run()
    {
      //     1000/25 Frames Per Second = 40millisecond delay
      int delayTime = 1000 / 25 ;

      Thread thisThread = Thread.currentThread() ;
      while( running )
      {
        //startTime = System.currentTimeMillis() ;
        // render to back buffer now
        render( myBackBuffer ) ;

        repaint() ;
        //  handle frame rate
        //elapsedTime = System.currentTimeMillis() - startTime ;
        //waitTime = Math.max( delayTime - elapsedTime, 5 ) ;

        try
        {
               Thread.sleep( waitTime ) ;
        }
        catch( InterruptedException e )
        {}
      }
      System.out.println( "Program Exited" ) ;
    }

   
  }

  private Thread gamePlay ;
  private boolean running = true ;
  private Game game ;

  private final int DISPLAY_X ; // value assigned in constructor
  private final int DISPLAY_Y ; // value assigned in constructor

  private static final int DISPLAY_W = 610 ;
  private static final int DISPLAY_H = 610 ;

  int size, hsize = 0, score1 = 0, score2 = 0, highscore = 0 ;

  /****Creates JMenuBar */
  private JMenuBar menubar ;
  /****Creates JMenu to house items */
  private JMenu gameMenu = new JMenu( "Game" ) ;
  private JMenuItem gameStart = new JMenuItem( "Start" ) ;
  private JMenuItem gameQuit = new JMenuItem( "Quit" ) ;

  private JMenu bgMenu = new JMenu( "Backgrounds" ) ;
  private ButtonGroup bgGroup = new ButtonGroup() ;
  private JRadioButtonMenuItem bg1 = new JRadioButtonMenuItem( "Default" ) ;
  private JRadioButtonMenuItem bg2 = new JRadioButtonMenuItem( "Long grass" ) ;
  private JRadioButtonMenuItem bg3 = new JRadioButtonMenuItem( "Yellow Sand" ) ;
  private JRadioButtonMenuItem bg4 = new JRadioButtonMenuItem( "Blue Glass" ) ;

  private JMenu soundMenu = new JMenu( "Enable sounds" ) ;
  private JCheckBoxMenuItem soundMusic = new JCheckBoxMenuItem( "Music" ) ;
  private JCheckBoxMenuItem soundSound = new JCheckBoxMenuItem( "Sounds" ) ;

  private JMenu helpMenu = new JMenu( "Help" ) ;
  private JMenuItem userInstruct = new JMenuItem( "User Instructions" ) ;
  private JMenuItem helpAbout = new JMenuItem( "About" ) ;

  /******JaySnake constructor*/
  public JaySnake()
  {
    setResizable( false ) ;
    game = new Game();
    getContentPane().add( game, BorderLayout.CENTER ) ;
    this.setJMenuBar( menubar );
              menubar.add( gameMenu ) ;
    gameMenu.add( gameStart ) ;
     // ActionListener to quit the game when quit is clicked
    gameStart.addActionListener( new ActionListener(){  
   
          public void actionPerformed( ActionEvent e )
          {
             String name = new String();
             name = JOptionPane.showInputDialog( "Please enter your name" );
             snake = new Snake(JaySnake.this, name, (soundForApple ? appleEaten : null));
          }
     });
     
    gameMenu.add( gameQuit ) ;

    // ActionListener to quit the game when quit is clicked
    gameQuit.addActionListener( new ActionListener(){  
          public void actionPerformed( ActionEvent e )
         {
             System.exit( 0 );
          }
     });  
     
                                               
/*Background selection menubar setup adding actionlisteners*/                        
    menubar.add( bgMenu ) ;
    bgMenu.add( bg1 ); bg1.addActionListener(this);
    bgMenu.add( bg2 ); bg2.addActionListener(this);
    bgMenu.add( bg3 ); bg3.addActionListener(this);
    bgMenu.add( bg4 ); bg4.addActionListener(this);
/* "bgGroup"  groups menu items for background together*/
         bgGroup.add( bg1 );      bgGroup.add( bg2 );
         bgGroup.add( bg3 );        bgGroup.add( bg4 );

     /*Sounds menubar selection with actionListeners*/    
    menubar.add( soundMenu );
    soundMusic.setState(true);
    soundMenu.add( soundMusic );
    soundMenu.add( soundSound ) ;
    soundSound.setState(true);

     /* Listeners */
     soundMusic.addActionListener(new ActionListener(){
               public void actionPerformed(ActionEvent e)
                 {
                    try
                    {
                         JCheckBoxMenuItem source = (JCheckBoxMenuItem)(e.getSource());
                         System.out.println(source.getText());
                         if (source.getState())
                         {
                              clip.loop();
                         }
                         else
                         {
                              clip.stop();
                         }
                         
                    }
                    catch (Exception ex)
                    {
                         System.out.println(ex);
                    }
                 }
          });
         
     soundSound.addActionListener(new ActionListener(){
               public void actionPerformed(ActionEvent e)
                 {
                    try
                    {
                         JCheckBoxMenuItem source = (JCheckBoxMenuItem)(e.getSource());
                         if (source.getState())
                         {
                                   soundForApple = true;
                                   snake.setAppleSound(appleEaten);
                         }
                         else
                         {
                                   soundForApple = false;
                                   snake.setAppleSound(null);
                         }
                    }
                    catch (Exception ex)
                    {
                         System.out.println(ex);
                    }
                 }
          });
     /* /Listeners */
     
    menubar.add( helpMenu ) ;
    helpMenu.add( userInstruct );
    userInstruct.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                System.out.println("Instructions button pressed");
                //Create new Jframe to view User instructions
                JFrame f = new JFrame();
                JEditorPane p = new JEditorPane("text/html", "");
                f.getContentPane().add(p); // was missing in the previous code snippet
                p.setEditable(false);
                URL instructions = getClass().getResource(
                        "instructions/index.html");
               
                try {
                    p.setPage(instructions);

                } catch (Exception ep) {
                    System.out.println("Not Got index.html");
                }

                f.setSize(265, 540);
               
                f.setVisible(true);

            }
        });

    helpMenu.add( helpAbout );
    helpAbout.addActionListener( new ActionListener(){  
             public void actionPerformed( ActionEvent e )
     {
//Create an instance of About class window
                   About dlg = new About( JaySnake.this );
                   Dimension dlgSize = dlg.getPreferredSize();
                   Dimension frmSize = getSize();
                   Point loc = getLocation();
                   dlg.setLocation((frmSize.width - dlgSize.width) / 2 + loc.x, (frmSize.height - dlgSize.height) / 2 + loc.y);
                   dlg.setModal(true);
                   dlg.pack();
                   dlg.show();
    }
     } ) ;

    addWindowListener( new WindowAdapter()
    {
      public void windowClosing( WindowEvent e )
      {
        dispose();
        System.exit( 0 ) ;
      }
    } ) ;

    Insets insets = getInsets() ;
    DISPLAY_X = insets.left ;
    DISPLAY_Y = insets.top ;
    resizeToInternalSize( DISPLAY_W, DISPLAY_H ) ;
  }

  public void actionPerformed(ActionEvent e)
  {
     try
     {
          JMenuItem source = (JMenuItem)(e.getSource());
          System.out.println(source.getText());
          game.setImage(source.getText());
     }
     catch (Exception ex)
     {
          System.out.println(ex);
     }
  }

  public void resizeToInternalSize( int internalWidth, int internalHeight )
  {
    Insets insets = getInsets() ;
    final int newWidth = internalWidth + insets.left + insets.right ;
    final int newHeight = internalHeight + insets.top + insets.bottom ;

    Runnable resize = new Runnable()
    {
      public void run()
      {
        setSize( newWidth, newHeight ) ;
      }
    } ;

    if( !SwingUtilities.isEventDispatchThread() )
    {
      try
      {
        SwingUtilities.invokeAndWait( resize ) ;
      }
      catch( Exception e )
      {}
    }
    else
      resize.run() ;

    validate() ;
  }

     public void playMusic()
     {
          clip.loop();
         
     }
     
  public void start()
  {
    Thread gamePlay = new Thread( game ) ;
    gamePlay.start() ;
  }
 
//**************************Main method *************************************
       public static void main(String [] arguments)
     {
         System.out.println( "Starting JaySnake........" ) ;
         final JaySnake app = new JaySnake() ;
   
         app.addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent keyevent) {
                //System.out.println("Test key press >>>>>>>>>>>>>>>>>>>>>>>>>>");
                app.snake.keyPressed(keyevent);
            }
        });
         app.setSize( DISPLAY_W, DISPLAY_H ) ;
         app.setTitle( "JaySnake Game" ) ;
         app.setVisible( true ) ;
         Splash splash = new Splash(app);

         new Thread(new Runnable()
              {
                   public void run()
                   {
                           try
                           {
                             app.playMusic();
                             Thread.sleep(200);
                        }
                        catch (InterruptedException e)
                        {
                             System.out.println(e);
                        }
                   }    
              }).start();
    }

/*Render method for graphics content*/
    public void render( Graphics g )
    {
     if( backgroundImage != null )
        g.drawImage( backgroundImage, 0, 0, this ) ;

/*Draw scoreboard and player details, sets color for score and player
 *fills rectangle and text white and draws another rectangle that is used
 *to highlight the playing area*/
      g.setColor( Color.black ) ;      /*sets color to black*/
      g.fillRect( 0, 0, 598, 32 ) ; /*fillsRectangle for scoreboard*/
      g.setColor( Color.white ) ;   /*sets color to white for text*/
/*Draws text and uses score variables*/
      g.drawString( "Player 1 score: " + score1, 10, 13 ) ;
      //g.drawString( "Player 2 score: " + score2, 10, 27 ) ;
      g.drawString( "High score: " + highscore, 510, 15 ) ;

     
    }

  /******declared class variables/containers*/
  private Image backgroundImage ;
  private Snake snake = null;
/* The musicclip to be played.*/
  private AudioClip clip = null;
/* The sound of the applet when eaten.*/
  private AudioClip appleEaten = null;
// Indicate if we want sound for eating the apple
     private boolean soundForApple = true;
}

Many thanks
0
Comment
Question by:pjcrooks2000
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 2
6 Comments
 
LVL 35

Accepted Solution

by:
girionis earned 2000 total points
ID: 11926773
Just use the setIcon method on the JMenuItem you have:

jmenuitem.setIcon(new ImageIcon("<your image here>"));

:)

0
 
LVL 35

Expert Comment

by:girionis
ID: 11926780
You could do for example:

gameMenu.add( gameStart ) ;
gameStart.setIcon(new ImageIcon("<your jpg icon here>"));


Regards
0
 
LVL 35

Expert Comment

by:girionis
ID: 11926788
Ehm.. Do you mean the JMenuBar itself? I do not think you can do it but I'll see what I can find.
0
Optimize your web performance

What's in the eBook?
- Full list of reasons for poor performance
- Ultimate measures to speed things up
- Primary web monitoring types
- KPIs you should be monitoring in order to increase your ROI

 
LVL 8

Author Comment

by:pjcrooks2000
ID: 11926806
Excellent g I do not even have to read in the images or delcare then either.

Thank you!  :)

I have added a new question ow too ... What another one ?  lol

http://www.experts-exchange.com/Programming/Programming_Languages/Java/Q_21111530.html
0
 
LVL 35

Expert Comment

by:girionis
ID: 11926811
Thank you for accepting, glad I was of help :)
0
 
LVL 8

Author Comment

by:pjcrooks2000
ID: 11926817
The pleasure and the priviledge was mine ... and thank you!
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

An old method to applying the Singleton pattern in your Java code is to check if a static instance, defined in the same class that needs to be instantiated once and only once, is null and then create a new instance; otherwise, the pre-existing insta…
INTRODUCTION Working with files is a moderately common task in Java.  For most projects hard coding the file names, using parameters in configuration files, or using command-line arguments is sufficient.   However, when your application has vi…
Viewers learn about the third conditional statement “else if” and use it in an example program. Then additional information about conditional statements is provided, covering the topic thoroughly. Viewers learn about the third conditional statement …
Viewers will learn about the regular for loop in Java and how to use it. Definition: Break the for loop down into 3 parts: Syntax when using for loops: Example using a for loop:
Suggested Courses
Course of the Month15 days, 2 hours left to enroll

770 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question