IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Comment mettre un Jpanel sur un autre ??


Sujet :

AWT/Swing Java

  1. #1
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 19
    Par défaut Comment mettre un Jpanel sur un autre ??
    je sais le titre n'est pas très clair mais j'ai pas reussi a mieux formuler

    voila j'ai deux classes extends JPanel avec chacun un paintComponent()
    et j'aimerais les ajouter l'un sur l'autre dans une nouvelle frame.

    j'ai essayer d'ajouter un puis l'autre
    (le deuxième ne fait que quelques pixels)
    mais quand je fait ça seul le second s'affiche avant un fond d'ecran gris qui prend toute la frame.

    donc je suppose qu'il faudrais que je rende le fond d'ecran du second Jpanel transparent.

    Si quelqu'un savais comment faire ??
    merci de votre aide

  2. #2
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Tu peut essayer en ajoutant le deuxième JPanel dans le premier, non ?

  3. #3
    Membre chevronné Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Par défaut
    Peut être aussi le JLayeredPane t'aidera-t-il ? Pour te faire une idée : How to Use Layered Panes.

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 418
    Par défaut
    Salut.

    Qu'utilises-tu comme LayoutManager dans ta JFrame (si tu en utilises un...) ?
    Car déjà, en utiliser un risque de t'empêcher de superposer 2 JPanels.

    A mon avis, il te faut déclarer un JPanel qui contiendra les 2 que tu veux superposer. Tu le définis sans LayoutManager
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    JPanel contenant = new JPanel(null);
    maJFrame.setContentPane(contenant);
    Tu pourras ajouter tes 2 JPanels, mais il faudrat préciser les coordonnées où tu veux les mettres, ainsi que leur taille (je sais plus exactement comment il faut faire).

    J'espère que ça t'aidera.

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 418
    Par défaut Oups...
    Effectivement, avec un JLayeredPane, ça à l'air plus simple

  6. #6
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 19
    Par défaut
    j'ai essayer de mettre un JLayeredPane()
    donc j'ai fait ça :

    panneau = new JLayeredPane();
    getContentPane().add(panneau);

    // ajout du premier JPanel
    mapLevel = new MapPengos(tab,pingouin);
    panneau.add(mapLevel,new Integer(1));

    // ajout du second
    pengosAnime = new PengosAnime(pingouin);
    panneau.add(pengosAnime,new Integer(2),0);
    mais la ni l'un, ni l'autre ne s'affiche
    j'ai oublier quelquechose ??

    Sinon je n'utilise aucun Layout dans cette frame

    merci pour vos reponse rapide

  7. #7
    Membre chevronné Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Par défaut
    Peut être que tu n'as pas précisé la taille des panneaux ? Vois à ce sujet Laying Out Components in a Layered Pane dans le tutorial java.

  8. #8
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 44
    Par défaut
    bonjour a tous :
    tu essaye ca

    setLayout(null);

    JPanel pan1 = new JPanel();
    pan1.setBounds(x1,y1,width1,height1);

    JPanel pan2 = new JPanel();
    pan2.setbounds(x2,y2,width2,height2);

    si ca marche c bien ,sinon dit moi "tu ecris n'importe koi mon pot!"

  9. #9
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 19
    Par défaut
    Peut être que tu n'as pas précisé la taille des panneaux ?
    j'ai mis un setPreferredSize(new Dimension(x,y)) dans chaque extends JPanel
    avec x,y pareil

    si ca marche c bien ,sinon dit moi "tu ecris n'importe koi mon pot!"
    ça marche a moitié
    en fait je vois toujours que le dernier JPanel inseré mais si je redimensionne la JFrame, je peux voir l'autre JPanel

    c'est comme si il yavais un fond d'écran sur le dernier JPanel insere
    Est-il possible de mettre un fond d'ecran invisible ??

  10. #10
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 19
    Par défaut
    pour eviter de me casser la tete

    j'ai ajouter a la frame le premier extends Jpanel
    et j'ai mis le second directement dans la frame

    c'est peut etre pas le plus beau code mais ca marche

    merci pour votre aide

  11. #11
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 19
    Par défaut
    en faite j'ai besoin de deux JPanel

    j'ai fais comme ici
    http://www.developpez.net/forums/arc...p/t-12668.html


    mais je pense que c'est parce qeu j'utilise un repaint tout le temps

    voila mon code

    ma classe extends JFrame (classe principale)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    public class PengosLeJeu3 extends JFrame implements ActionListener{
    	private DoubleBuffer buffer;
    	private Timer horloge;
     
     
     
    	public PengosLeJeu3() {
    		/** j'initialise tout mes classes */
     
    // premier classe extends JPanel celle qui doit etre en fond d'ecran 
    		mapLevel = new MapLevel1(tab, pingouin);	
    // deuxieme classe extends JPanel	
    		pengosAnime = new PengosAnime2(pingouin);
     
    		layeredPane = new JLayeredPane();
    		layeredPane.add(mapLevel,JLayeredPane.DEFAULT_LAYER);
    		layeredPane.add(pengosAnime,JLayeredPane.PALETTE_LAYER);
     
    		horloge = new Timer(50,this);
    		horloge.start();
    	}
     
    	public void actionPerformed(ActionEvent ev) {
    		pengosAnime.setImagePengos();
    		pengosAnime.numImage++;
    		if(pengosAnime.numImage==pengosAnime.pengosChoisi.length) {
    			pengosAnime.numImage = 0;
    		}
    		render();
    	}
     
     
    	//LA METHODE POUR DESSINER
    	public void render() {
    		createBufferStrategy(2);//on cree le bufferstrategy sur la fenêtre
    		buffer =this.getBufferStrategy();//et on le stocke dans une variable
    		Graphics g;
    		try {
    			g = buffer.getDrawGraphics();
    			pengosAnime.paint(g);
    			mapLevel.paintComponent(g);
    			g.dispose();
    		}
    		finally {
    			buffer.show();
    		}
     
    	}
    }

    mes deux classe extends JPanel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
     
     
    public class PengosAnime2 extends JPanel implements KeyListener{
    	private PlayerPengos pingouin;
     
    	public Image[] pengosChoisi;
    	public int numImage;
    	private int direction;
     
    	private Image pengosUP[]={avec toutes mes images};
    	private Image pengosDown[]={ avec toutes mes images};
    	private Image pengosLeft[]={avec toutes mes images } ;
    	private Image pengosRight[]={ avec toutes mes images};
     
     
     
    	public PengosAnime2(PlayerPengos pingouin) {
                             this.setBounds(0,0,650,537);
    		this.pingouin = pingouin;
     
    		numImage = 0;
    		pengosChoisi = new Image[pengosUP.length];
    		pengosChoisi = pengosRight;
     
    		direction = 3 ;
    		repaint();
    	}
     
     
     
    	/*
                  * change le tableau d'image en fonction de la direction
    	 * direction = 1 => gauche
    	 * direction = 2 => haut
    	 * direction = 3 => droite
    	 * direction = 4 => bas 
    	 */
    	public void setImagePengos() {
     
    	}
     
     
     
    	public void paint(Graphics g) {
    		super.paint(g);		
     
    		g.drawImage(pengosChoisi[numImage],pingouin.getCoordX(),pingouin.getCoordY(),null);
     
     
    //fait avancer le pingouin en fonction de la direction
    		if(direction == 1){
    			pingouin.setCoordX(pingouin.getCoordX()-3);
    		}
    		else if(direction == 2) {
    			pingouin.setCoordY(pingouin.getCoordY()-3);
    		}
    		else if(direction == 3) {
    			pingouin.setCoordX(pingouin.getCoordX()+3);
    		}
    		else if(direction == 4) {
    			pingouin.setCoordY(pingouin.getCoordY()+3);
    		}
    	}
     
    	public void keyPressed(KeyEvent e){
    		//On recupere le code Unicode du caractere tape		
    		if (e.getKeyCode()==KeyEvent.VK_DOWN){
    			System.out.println("bas");
    			direction = 4;
    		}
    		else if (e.getKeyCode()==KeyEvent.VK_UP){
    			System.out.println("haut");
    			direction = 2;
    		}
    		else if (e.getKeyCode()==KeyEvent.VK_RIGHT){
    			System.out.println("droite");
    			direction = 3;
    		}
    		else if (e.getKeyCode()==KeyEvent.VK_LEFT){
    			System.out.println("gauche");
    			direction = 1;
    		}
     
    	}	
    	public void keyReleased(KeyEvent e){}  
    	public void keyTyped(KeyEvent e){}
     
     
    	public int getDirection() {
    		return direction;
    	}
     
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    public class MapLevel1 extends JPanel{
    	private ImageIcon blocGlace;
    	private ImageIcon poisson;
    	private ImageIcon bonus;
    	private ImageIcon mechant;
     
    	private TableauMapLevel1 tab;
    	private PlayerPengos pingouin;
     
    	MapLevel1(TableauMapLevel1 tab, PlayerPengos pingouin) {
                              this.setBounds(0,0,650,537);
    		this.tab = tab;
    		this.pingouin = pingouin;
     
    		blocGlace = new ImageIcon("./img/block1.PNG");
    		poisson = new ImageIcon("./img/herringicon.PNG");
     
    		vie = new ImageIcon("./img/vie.GIF");
    		perduVie = new ImageIcon("./img/perdu_vie.GIF");
    		panneauScore = new ImageIcon("./img/panneauScore.GIF");
     
    		bonus = new ImageIcon("./img/pengosSuperMan/SM_LEFT/pengosSM1.GIF");
    		mechant = new ImageIcon("./img/walker2.PNG");
    	}
     
     
    	public void paintComponent(Graphics g) {
    		super.paintComponent(g);
    		setBackground(new Color(150,200,255));
     
    		int x = 0;
    		int y = 0;
     
    		/** partie map**/
    		for(int i =0; i<tab.getPlateau().length; i++){
    			for(int j=0; j<tab.getPlateau().length; j++) {
    				if(tab.getPlateauIJ(i,j) == 0) {
    					g.drawImage(blocGlace.getImage(),x,y,null);
    					x += 24;
    				}
    				else if(tab.getPlateauIJ(i,j) == 1) {
    					y += 7;
    					x+= 2;
    					g.drawImage(poisson.getImage(),x,y,null);
    					x += 22;
    					y -= 7;
    				}
    				else if(tab.getPlateauIJ(i,j) == 2) {
    					g.drawImage(bonus.getImage(),x,y,null);
    					x += 24;
    				}
    				else if(tab.getPlateauIJ(i,j) == 3) {
    					x += 24;
    				}		
    				else if(tab.getPlateauIJ(i,j) == 4) {
    					//g.drawImage(mechant.getImage(),x,y,null);
    					x += 24;
    				}
    				else {
    					x += 24;
    				}
    			}
    			y +=24;
    			x = 0;
     
    		}		
    	}
     
    }

    Si je le mets en marche
    ca m'affiche que le MapLevel1


    si quelqu'un a une idée
    perso je pense que c'est a cause du render()
    mais je ne sias pas comment le modofier pour le faire marcher :s

    merci pour votre aide

Discussions similaires

  1. [Débutant] Comment mettre des etiquettes sur un graphique autres que des chiffres
    Par jean-luc-thebert dans le forum MATLAB
    Réponses: 2
    Dernier message: 01/10/2008, 20h22
  2. comment Positionner une image sur une autre ?
    Par moumoule17 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 25/11/2004, 16h41
  3. [Info]Comment mettre une servlet sur le web?
    Par fred9510 dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 15/08/2004, 16h40
  4. Comment mettre un label sur une image
    Par dug dans le forum MFC
    Réponses: 3
    Dernier message: 07/04/2004, 10h40
  5. Réponses: 2
    Dernier message: 19/08/2003, 15h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo