Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1535 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Probleme de superposition JLabel sur JFrame-avec-Background

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme de superposition JLabel sur JFrame-avec-Background

n°1938822
ZePRiNCE
Coucou, tu veux voir ma RTX ?
Posté le 09-11-2009 à 00:51:50  profilanswer
 

Bonjour !
Pour mon premier programme Java j'essaie de faire un (tout petit) jeu de combat (si on voit le fond d'ecran et 2 personnages qui bougent je serai deja content :D)
 
Seulement j'ai un probleme pour "superposer" les choses.
 
Pour mon fond j'ai créé une classe BGFrame derivée de JFrame pour prendre en compte "facilement" les fond d'écran. Ca ca marche :)
Mais c'est quand je veux ajouter quelque chose (un joueur : un jlabel) par dessus que ça ne fonctionne plus.
 
BGFrame.java :

Code :
  1. import java.awt.event.*;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. public class BGFrame extends JFrame
  5. {
  6. Image image;
  7. JScrollPane scrollPane;
  8. public void setBackground(String src)
  9. {
  10.  image = new ImageIcon(src).getImage();
  11.  JPanel panel = new JPanel()
  12.  {
  13.   protected void paintComponent(Graphics g)
  14.   {
  15.    Dimension d = getSize(); //capture les dimensions de la fenetre
  16.    g.drawImage(image, 0, 0, d.width, d.height, null); //dessine l'image aux dimensions de la fenetre
  17.    super.paintComponent(g); //peint la fenetre avec ce qu'on a choisi
  18.   }
  19.  };
  20.  panel.setOpaque(false);
  21.  super.getContentPane().add(panel);
  22. }
  23. }


 
 
 
MainClass.java :

Code :
  1. import java.awt.event.*;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. public class MainClass
  5. {
  6. public static void main(String [] args)
  7. {
  8.  /* CREATION DE LA FENETRE PRINCIPALE */
  9.  BGFrame frame = new BGFrame();
  10.  frame.setTitle("Kung-Fu Mast3r" );
  11.  frame.setSize(1024,768);
  12.  frame.setBackground("sf2-blanka.gif" );
  13.  frame.setResizable(false);
  14.  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  15.  frame.setVisible(true);
  16.    
  17.    
  18.     JLabel label = new JLabel("LIUKANG" );
  19.     label.setBackground(Color.red);
  20.     label.setSize(200,200);
  21.     frame.add(label);
  22. }
  23. }


 
 
Plus tard je ferai une class Player (derivé de JLabel a priori) mais je l'ai déjà fait et ça ne marche pas. J'essaie donc de revenir sur des choses simples.
mais ca ne marche toujours pas.
 
 
En fait : je n'arrive pas a superposer un JLabel sur ma BGFrame
Soit on voit mon "background", soit on voit mon "Liu Kang", mais impossible de voir l'un par dessus l'autre.

 
J'ai aussi essayé avec un frame.setContentPane(panel); mais je dois mal l'utiliser.
 
 
Est-ce que quelqu'un pourrait m'aider sur ce probleme de débutant ?
 
 
Merci d'avance :jap:


Message édité par ZePRiNCE le 09-11-2009 à 00:53:19

---------------
A VENDRE: Razer Chroma ARGB Controller / Boitier / Support Triple Screen / Ventirad / Carte USB3
mood
Publicité
Posté le 09-11-2009 à 00:51:50  profilanswer
 

n°1939080
ZePRiNCE
Coucou, tu veux voir ma RTX ?
Posté le 09-11-2009 à 16:30:46  profilanswer
 

Personne ne peut m'aider svp ?


---------------
A VENDRE: Razer Chroma ARGB Controller / Boitier / Support Triple Screen / Ventirad / Carte USB3
n°1939083
pataluc
Posté le 09-11-2009 à 16:37:29  profilanswer
 

ajoute plutot ton label à ton panel... et revois tes bases de GUI java aussi, parce que vu comme tu démarre, tu vas vite ne plus t'y retrouver...

n°1939110
ZePRiNCE
Coucou, tu veux voir ma RTX ?
Posté le 09-11-2009 à 18:06:51  profilanswer
 

pataluc a écrit :

ajoute plutot ton label à ton panel... et revois tes bases de GUI java aussi, parce que vu comme tu démarre, tu vas vite ne plus t'y retrouver...


Mon panel liukang ?
 
L'ajouter où ?
 
J'aimerais separer le fond d'ecran et les différents panel que je vais ajouter "par dessus" (joueur 1, joueur 2, vie 1, vie 2)
 
J'ai jamais eu aucun cour donc oui, il me manque des bases c'est certain.
Tu pourrais me dire comment faire ça facilement et proprement stp (donc en séparant bien les choses :/)
 
 
(tu me parlais de tout mettre en vrac dans mon paintcomponent de Label>BGFrame ? :| )


---------------
A VENDRE: Razer Chroma ARGB Controller / Boitier / Support Triple Screen / Ventirad / Carte USB3
n°1939122
ZePRiNCE
Coucou, tu veux voir ma RTX ?
Posté le 09-11-2009 à 18:24:15  profilanswer
 

C'est ma BGFrame qui n'est pas bien ?


---------------
A VENDRE: Razer Chroma ARGB Controller / Boitier / Support Triple Screen / Ventirad / Carte USB3
n°1939161
cbeyls
Hail to the King, Baby
Posté le 09-11-2009 à 21:34:44  profilanswer
 

Il dit que tu dois mettre ton JLabel dans le JPanel et pas dans la JFrame, puisque c'est le JPanel qui contient l'image d'arrière-plan et pas la fenêtre elle-même.
 
Donc tu gardes une référence vers ton panel et tu ajoutes ton label dedans.
 
Et de toutes manières tu ne peux pas appeler add() sur une JFrame pour mettre un composant Swing dedans, add() c'est une méthode réservée à AWT sur les Frames. En Swing il faut faire getContentPane().add() comme tu le fais déjà pour ajouter le panel à ta fenêtre d'ailleurs.

Message cité 1 fois
Message édité par cbeyls le 09-11-2009 à 21:36:00
n°1939164
cbeyls
Hail to the King, Baby
Posté le 09-11-2009 à 21:44:09  profilanswer
 

Et je pense que la meilleure façon de charger une image depuis une URL c'est:
 

Code :
  1. Image image = Toolkit.getDefaultToolkit().getImage(url);


Message édité par cbeyls le 09-11-2009 à 21:48:52
n°1939197
ZePRiNCE
Coucou, tu veux voir ma RTX ?
Posté le 09-11-2009 à 22:23:51  profilanswer
 

cbeyls a écrit :

Il dit que tu dois mettre ton JLabel dans le JPanel et pas dans la JFrame, puisque c'est le JPanel qui contient l'image d'arrière-plan et pas la fenêtre elle-même.


A ce propos, est-ce possible de mettre une image en arriere plan dans la JFrame directement, plutot que de prendre un JPanel de 100% et de lui mettre une image. ?
 
Pour ton 2e post, les images sont en locales.
 
 
Je viens d'essayer de mettre le LiuKang directemetn dans le fichier BGFrame.java, dans son JLabel ou bien dans un nouveau main de BGFrame.java mais c'est toujours pareil, on voit soit l'un, soit lautre.
 
Je vais regarder du coté de JLayeredPane c'est ce que j'ai trouvé avec Google.....  :??:


---------------
A VENDRE: Razer Chroma ARGB Controller / Boitier / Support Triple Screen / Ventirad / Carte USB3
n°1939232
ZePRiNCE
Coucou, tu veux voir ma RTX ?
Posté le 09-11-2009 à 23:33:07  profilanswer
 

cbeyls a écrit :

Quand je dis de mettre le label dans le panel je ne parle pas d'organisation du code, je veux dire que tu dois faire panel.add(label) et pas frame.add(label) !


Ah oui effectivement, ca fonctionne, merci.
 
Sauf qu'il ne connait pas "label" depuis MainClass, donc je dois créer mon JLabel LiuKang depuis BGFrame et c'est pas tres "logique"
Je vais regarder comment découper ça bien.
 
:)


---------------
A VENDRE: Razer Chroma ARGB Controller / Boitier / Support Triple Screen / Ventirad / Carte USB3
n°1939233
cbeyls
Hail to the King, Baby
Posté le 09-11-2009 à 23:34:14  profilanswer
 

Quand on dit de mettre le label dans le panel on ne parle pas d'organisation du code: tu dois faire panel.add(label) et pas frame.add(label) !
 
Si tu ne veux pas passer par le JPanel tu peux essayer d'overrider la méthode paint() de ta JFrame au lieu d'overrider paintComponent sur le Panel, et bien sûr ne pas oublier d'appeler super.paint() à la fin sinon les labels ne seront pas dessinés sur l'arrière-plan.
 
Pour le chargement de l'image en local ma remarque reste la même. Remplace l'url de mon exemple par une chaîne de caractères qui représente le path.
 
JLayeredPane semble en effet adapté si tu veux plusieurs éléments qui se superposent sur plusieurs niveaux.


Message édité par cbeyls le 09-11-2009 à 23:35:15
mood
Publicité
Posté le 09-11-2009 à 23:34:14  profilanswer
 

n°1939251
ZePRiNCE
Coucou, tu veux voir ma RTX ?
Posté le 10-11-2009 à 02:27:37  profilanswer
 

J'ai réussi a m'en sortir grace a ce que tu m'as dit :D
 
Pas besoin de JLayeredPane  puisque au maximum ya le background et le joueur par dessus :)
 
Merci beaucoup ! :hello:


---------------
A VENDRE: Razer Chroma ARGB Controller / Boitier / Support Triple Screen / Ventirad / Carte USB3

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Probleme de superposition JLabel sur JFrame-avec-Background

 

Sujets relatifs
Select lié en JS+PHP : problème avec IEProblème de librairies dynamiques
Eclipse, SVN, EJB (probleme)Problème rapidité de mise en pause
Problème fichier de configuration hibernateProbleme d'écriture pour un client (JAVA)
probléme d'insertion de caractères accentués dans un xml via phpprobléme d'insertion de caractères accentués dans un xml via php
Problème placement JButtonproblème affichage sous IE
Plus de sujets relatifs à : Probleme de superposition JLabel sur JFrame-avec-Background


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR