tags:

views:

19

answers:

1

I have found an odd way of putting a picture in an applet just by itself, but it doesn't seem to work when i put the code in the buttonListener for the picture to show when a button is pressed. If you could also give me the simplest code for putting a picture in an applet, it would be very much appreciated!

the code that works: import java.awt.; import java.applet.; import javax.swing.*;

public class gamedone extends JApplet {

public void init() {

    Container cp = getContentPane();
    cp.setBackground(Color.black);

    Container content_pane = getContentPane();

    Image img = getImage(getCodeBase(), "portal-cake.jpg");

    DrawingPanel drawing_panel =  new DrawingPanel(img);

    // Add the DrawingPanel to the content pane.
    content_pane.add(drawing_panel);
  } // init

} class DrawingPanel extends JPanel { Image img;

  DrawingPanel (Image img)
  { this.img = img; }

  public void paintComponent(Graphics g) {
    super.paintComponent(g);

    g.drawImage(img, 0, 0, this);

    }

}

but when this is the program i added it to, and the button doesn't make it work:

import java.awt.; import java.applet.; import java.awt.event.; import javax.swing.;

public class TypeInNames extends JApplet{

 JButton StartButton;
 JTextField name1, name2;
 String player1, player2;
 String reply;


 Container cp = getContentPane();

 public void init() 
 {

    setSize(350, 400);
    setLayout(null);

    cp.setBackground(Color.black);

    StartButton = new JButton("Start Game!");
    name1 = new JTextField("Player 1",35);
    name2 = new JTextField("Player 2",35);
    //(x, y, width, height);
    StartButton.setBounds(115,200,120,30);
    name1.setBounds(115,140,120,20);
    name2.setBounds(115,170,120,20);


    startGame();
 }

 public void startGame()
 {
    add(StartButton);
    add(name1);
    add(name2);


    StartButton.addActionListener(new ButtonListener());
 }

 public void game()
 {

 }

 public void endGame()
 {

    Container cp = getContentPane();
    cp.setBackground(Color.black);

    Container content_pane = getContentPane();

    Image img = getImage(getCodeBase(), "portal-cake.jpg");

    DrawingPanel drawing_panel =  new DrawingPanel(img);

    // Add the DrawingPanel to the content pane.
    content_pane.add(drawing_panel);
 }

 private class ButtonListener implements ActionListener{

     public void actionPerformed(ActionEvent event)
     {
        if (event.getSource() == StartButton)
        {
            player1 = name1.getText();
            player2 = name2.getText();
            remove(StartButton);
            remove(name1);
            remove(name2);

            endGame();
            repaint();
        }
     }

 }



}
A: 

Not sure about this but you could try the following:

  1. You should call setBounds() on your drawing_panel

  2. images load asynchronously; you may want to use an ImageObserver to know when it has loaded, then repaint. You could override your DrawingPanel.imageUpdate() method.

  3. is the tree being updated? you may need to call getContentPane().invalidate() after adding the component.

Sanjay Manohar