Avatar billede morteeart Nybegynder
13. januar 2005 - 13:15 Der er 5 kommentarer og
1 løsning

tilføje billede til JPanel

Hej

ja, mere java :) det går godt i dag.

Skal have sat et billede på min JFrame, men det jeg ikke kan bruge alm. graphics g, ville jeg tilføje et JPanel, og så bruge en JLabel til at tilføje billedet, men det gik ikke så godt

Det er i disse linjer det går galt:


    URL PacManUrl = getClass().getResource("PacMan2right.gif");
    ImageIcon PacManImage = new ImageIcon(PacManUrl);

    JPanel cp = new JPanel(new GridLayout(0,3));
    JLabel thepacman = new JLabel(PacManImage);
    cp.add(thepacman);
    setContentPane( cp );


[Hele koden]

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;
import java.io.*;
import java.net.*;

public class PacMan extends JFrame implements KeyListener
{

  String PacManIcon = "PacMan2right.gif";

  public PacMan(String str)
  {
    super(str);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(400,400);
    setVisible(true);
    addKeyListener(this);

    URL IconUrl = getClass().getResource(PacManIcon);
    ImageIcon icon = new ImageIcon(IconUrl);
    setIconImage(icon.getImage());

    URL PacManUrl = getClass().getResource("PacMan2right.gif");
    ImageIcon PacManImage = new ImageIcon(PacManUrl);

    JPanel cp = new JPanel(new GridLayout(0,3));
    JLabel thepacman = new JLabel(PacManImage);
    cp.add(thepacman);
    setContentPane( cp );
  }

  String imgsrc = "PacMan2right.gif";

  public void update(int pic)
  {
    if(pic == 1)
    {
      imgsrc = "PacMan2left.gif";
    }
    else
    {
      imgsrc = "PacMan2right.gif";
    }
  }

  public void keyPressed(KeyEvent ev)
  {
    if(ev.getKeyCode() == KeyEvent.VK_UP)
    {
      System.out.println("pil op");
    }
    else if(ev.getKeyCode() == KeyEvent.VK_DOWN)
    {
      System.out.println("pil ned");
    }
    else if(ev.getKeyCode() == KeyEvent.VK_LEFT)
    {
      System.out.println("pil til venstre");
      update(1);
      repaint();
    }
    else if(ev.getKeyCode() == KeyEvent.VK_RIGHT)
    {
      System.out.println("pil til hoejre");
    }
    else
    {
      System.out.println("Tast: '" + ev.getKeyChar() + "'");  //andre taster
    }
  }
  public void keyReleased(KeyEvent ev) {}
  public void keyTyped(KeyEvent ev) {}

  public static void main(String[] args)
  {
    new PacMan("PacMan");
  }
}
Avatar billede kalp Novice
13. januar 2005 - 15:19 #1
Hej morteart:)

Vil du lave en figur der bevæger sig rundt på skærmen ved hjælp af piltasterne?

Hvis ja kan jeg lige lave det til dig i aften efter arbejde:) Er på vej ud af døren nu nemlig
Avatar billede morteeart Nybegynder
13. januar 2005 - 18:49 #2
ja, det er det jeg har gang i , men jeg vil helst ikke have løsning foræret.

Har tidligere lavet animationer, skal bare lige finde ud af hvordan jeg for sat det billede på et JFrame (med et JPanel på)

Det med at kode keyEvent på vil jeg helt selv ;-)

Men tak for forslaget.
Avatar billede kalp Novice
13. januar 2005 - 20:44 #3
kan du bruge dette eksempel? (en applet)



import javax.swing.*;

public class Direction extends JApplet
{

  public void init()
  {
      getContentPane().add (new DirectionPanel(this));
  }
}







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

public class DirectionPanel extends JPanel
{
  private final int WIDTH = 300, HEIGHT = 200;
  private final int JUMP = 10;  // increment for image movement

  private final int IMAGE_SIZE = 31;

  private ImageIcon up, down, right, left, currentImage;
  private int x, y;


  public DirectionPanel (JApplet applet)
  {
      applet.addKeyListener (new DirectionListener());

      x = WIDTH / 2;
      y = HEIGHT / 2;

      up = new ImageIcon ("arrowUp.gif");
      down = new ImageIcon ("arrowDown.gif");
      left = new ImageIcon ("arrowLeft.gif");
      right = new ImageIcon ("arrowRight.gif");

      currentImage = right;

      setBackground (Color.black);
      setPreferredSize (new Dimension(WIDTH, HEIGHT));
  }


  public void paintComponent (Graphics page)
  {
      super.paintComponent (page);
      currentImage.paintIcon (this, page, x, y);
  }


  private class DirectionListener implements KeyListener
  {
   
      public void keyPressed (KeyEvent event)
      {
        switch (event.getKeyCode())
        {
            case KeyEvent.VK_UP:
              currentImage = up;
              if (y > 0)
                  y -= JUMP;
              break;
            case KeyEvent.VK_DOWN:
              currentImage = down;
              if (y < HEIGHT-IMAGE_SIZE)
                  y += JUMP;
              break;
            case KeyEvent.VK_LEFT:
              currentImage = left;
              if (x > 0)
                  x -= JUMP;
              break;
            case KeyEvent.VK_RIGHT:
              currentImage = right;
              if (x < WIDTH-IMAGE_SIZE)
                  x += JUMP;
              break;
        }

        repaint();
      }

   
      public void keyTyped (KeyEvent event) {}
      public void keyReleased (KeyEvent event) {}
  }
}
Avatar billede snoop_one Nybegynder
15. januar 2005 - 17:59 #4
Hej Morteeart...

Som en god GUI regl skal man ikke kalde setVisible(true) før alle ens komponenter er sat  op (dvs. det burde være noget af det sidste der bliver kaldt i din konstruktor). Desuden skal du altid kalde pack() når du er færdige med at sætte komponenterne sammen.

Prøv at sætte

pack();
setVisible(true);

som noget af det sidste i din constructor.
Avatar billede morteeart Nybegynder
19. januar 2005 - 14:22 #5
tjaa, har fået det løst på nogle lidt andre måder, men kalp fortjener alligevel points, det kodeeksemplet var det brug :)
Avatar billede kalp Novice
19. januar 2005 - 20:31 #6
så får du da et svar:) lidt forsinket men har ikke været hjemme så meget i dag:)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester