Tu peux sous-classer le JPanel pour qu'il accepte une image de fond
http://faqjava.developpez.com/?page=graphique_general_images#GRAPHIQUE_IMAGE_fond_fenetre

Tu peux utiliser la technique de double-buffering pour afficher l'image par dessus :
http://java.sun.com/docs/books/tutorial/extra/fullscreen/doublebuf.html

Anthony


-----Message d'origine-----
De : andriamasinoro fenintsoa [mailto:[EMAIL PROTECTED]]
Envoy� : lundi 10 f�vrier 2003 15:22
� : [EMAIL PROTECTED]
Objet : Re: Aide sur JLayeredPane


Merci pour la proposition sur l'Icon. J'ai n�anmoins essay� avec tout d'abord un 
simple fillRect mais il n'affiche toujours rien, sauf la carte
de la premi�re couche �videmment (voir le code ci-dessous). La m�thode setLocation() 
de mon JLabel "icLabel" ne devrait-elle pas appeler
implicitement le paintIcon() de ma class MyIcon?

Merci pour la r�ponse

--
ANDRIAMASINORO Fenintsoa (Mr)
IREMIA-Lab. | University of La R�union (France)
tel: 0 262 938 324 | cel: 0 692 811 924 | fax: 0 262 938 260
from abroad: 0 -> +262
Web page: "http://fenintsoa.net/";
-----
lift up the wisdom and the wisdom will lift you up [Prov. 4:7-8]

******************
public class LayeredPaneDemo extends JFrame {
  ImageIcon backGroundImg;
  ImageIcon[] images;
  JLabel icLabel;
  private JLayeredPane layeredPane;
  private JLabel dukeLabel;

  public LayeredPaneDemo()    {
    super("LayeredPaneDemo");

    //Create and load the duke icon.
    int k = 0;
    backGroundImg = new ImageIcon("images/map.jpg");

    //Create and set up the layered pane.
    layeredPane = new JLayeredPane();
    layeredPane.setPreferredSize(new Dimension(1000, 1000));

    //Add several overlapping, colored labels to the layered pane
    //using absolute positioning/sizing.
    JLabel backGround = new JLabel(backGroundImg);
    backGround.setBounds(0, 0, 500, 500);
    layeredPane.add(backGround, new Integer(0));

    // Add MyIcon
    MyIcon mi = new MyIcon();
    icLabel = new JLabel(mi);
    layeredPane.add(icLabel, new Integer(1));


    //Add layered pane to frame.
    getContentPane().add(layeredPane);

    Thread thread = new Thread(){
 public void run()
 {
   int y = 70;
   int k = 0;
   while(true)
     {
       icLabel.setLocation(70, y);
       k %= 8;
       y += 10;
       try{Thread.sleep(100);}
       catch(Exception e)
  {System.out.println("aaa");}
     }
 }
      };
    thread.start();
  }

  public static void main(String[] args) {
    JFrame frame = new LayeredPaneDemo();

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

    frame.pack();
    frame.setVisible(true);
  }
}


class MyIcon implements javax.swing.Icon
{
  MyIcon()
  {System.out.println("constructor");}


  public void paintIcon(Component c, Graphics g, int x, int y)
  {
    System.out.println("OK");

    g.setColor(Color.RED);
    g.fillRect(0, 0, 10, 10);
  }

  public int getIconWidth()
  {return 50;}

  public int getIconHeight()
  {return 50;}

}
*************************

Erik Mazoyer wrote:

> Jpanel est un objet utilisable quand on d�sire placer en son sein d'autres composant 
>visuels.
> Il ne semble pas que cela soit les cas.
>
> Un cas plus simple est de d�river directement de javax.swing.JComponent.
>
> Mais dans ton cas, pour dessiner une voiture tu peux, beaucoup plus simplement, 
>impl�menter l'interface javax.swing.Icon et utiliser JLabel.
>
> Icon impose une m�thode :
> public void paintIcon(Component c,
>                       Graphics g,
>                       int x,
>                       int y)
> Ou tu pourras dessiner ta voiture dans l'orientation d�sir�e.
>
> Cordialement,
>
> --------------------------------------------------------------------
> Erik Mazoyer, Chef de projet
> HyperOffice
> 6, rue Jacques Daguerre - 92565 Rueil-Malmaison Cedex
> T�l. 01 41 96 96 76
> Fax 01 41 96 96 77
> M�l  [EMAIL PROTECTED]
>
>
> -----Message d'origine-----
> De : andriamasinoro fenintsoa [mailto:[EMAIL PROTECTED]]
> Envoy� : lundi 10 f�vrier 2003 09:11
> � : [EMAIL PROTECTED]
> Objet : Aide sur JLayeredPane
>
> Bonjour,
>
> Je souhaite utiliser un JLayerdPane pour les objectifs suivants:
> couche 0: afficher une carte de ville en background
> couche 1: dessiner une voiture via un polygon. Cette voiture sera
> redessin�e en permanence en fonction de son orientation mais c'est le
> backgournd qui ne change pas.
>
> Le probl�me est que je dois d'abord avoir le Graphics context (le g
> donc) correspondant � la voiture avant de pouvoir la dessiner. Pour
> cela, je pensais utiliser un JPanel (cf. le code ci-dessous) mais ...ma
> voiture ne s'affiche pas. Pourquoi svp? est-ce que le JPanel est en
> conflit avec une couche d'un JLayeredPane? Quelle solution
> proposez-vous?
>
> Merci pour votre aide
>
> ANDRIAMASINORO Fenintsoa (Mr)
>
> ps: avec un JLabel et une imageIcon, �a marche bien. Mais comme ma
> voiture s'oriente en permanence d'un certain angle (et aussi pour des
> raisons de performance), je pr�f�re utiliser g.fillXXX() et les
> g.drawXXX() pour afficher ma voiture.
>
> *************************
>     backGroundImg = new ImageIcon("images/map.jpg");
>
>     //Create and set up the layered pane.
>     layeredPane = new JLayeredPane();
>
>     JLabel backGround = new JLabel(backGroundImg);
>     backGround.setBounds(0, 0, 1000, 1000);
>     layeredPane.add(backGround, new Integer(0));
>
>     //Create and add the Duke label to the layered pane.
>     dukeLabel = new JLabel(icon);
>     dukeLabel.setBounds(70, 70, icon.getIconWidth(),
> icon.getIconHeight());
>     layeredPane.add(dukeLabel, new Integer(0), 0);
>
> // Create and add Panel
>     JPanel panel = new JPanel() {
>  public Dimension getPreferredSize() {
>    return new Dimension(800,600);
>  }
>
>  public void paint(Graphics g) {
>    super.paint(g);
>    g.fillRect(...);
>  }
>       };
>
> --
> IREMIA-Lab. | University of La R�union (France)
> tel: 0 262 938 324 | cel: 0 692 811 924 | fax: 0 262 938 260
> from abroad: 0 -> +262
> Web page: "http://fenintsoa.net/";
> -----
> lift up the wisdom and the wisdom will lift you up [Prov. 4:7-8]




Répondre à