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

Interfaces Graphiques en Java Discussion :

Superposition de JPanel


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 159
    Points : 52
    Points
    52
    Par défaut Superposition de JPanel
    Bonjour à tous voila je réalise en ce moment un projet qui consiste en la création d'un Labyrinthe, et je suis en ce moment bloqué sur l'affichage d'un compteur.

    Je crée un plateau héritant d'un JPanel et contenant mes cellules pour la génération du labyrinthe jusque l'à tous va bien. Et ensuite quand je souhaite rajouter un compteur pour donner un temps max au joueur les choses se gatte . Par soucis de mise à jour j'ai deux JPanels le premier affichant mon plateau et s'actualisant à chaque nouveau clic du joueur, et un JPanel pour le compteur qui s'actualise toutes les secondes.

    Problème : Je n'arrive pas à superposer les deux JPanel dans ma JFrame. Je souhaite en effet afficher mon compteur sur mon plateau tout en ayant encore le clic souris accessible pour celui ci...

    Si quelqu'un avait une idée sur le sujet je suis preneur. J'ai entendu parler de pas mal de chose mais rien de bien satisfaisant.

    Principal.class
    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
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    package Laby;
    
    import java.awt.Container;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.JFrame;
    import javax.swing.JLayeredPane;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JOptionPane;
    
    public class Principal {
    
    	public static void main(String[] args) {
    
    		final JFrame jf = new JFrame();
    		jf.setTitle("Labyrinthe de Rêve");
    
    		// taille fenetre
    		jf.setSize(900, 600);
    		// positionner au centre
    		jf.setLocationRelativeTo(null);
    		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		jf.setResizable(false); // on empeche le redimensionnement
    
    		/* Container du plateau et du compteur */
    		final Container c = jf.getContentPane();
    		final Container d = jf.getContentPane();
    		
    		/* Creation de la bar de Menu */
    		JMenuBar menuBar = new JMenuBar();
    
    		/* creation du menu */
    		JMenu top1 = new JMenu("Fichier");
    		JMenu top2 = new JMenu("A propos");
    
    		/* creation des objets dans le menu */
    		JMenuItem item11 = new JMenuItem("Nouvelle Partie ");
    		JMenuItem item12 = new JMenuItem("Charger // inactif");
    		JMenuItem item13 = new JMenuItem("Sauvegarde // inactif");
    		JMenuItem item14 = new JMenuItem("Records // inactif");
    		JMenuItem item15 = new JMenuItem("Quitter ");
    		JMenuItem item21 = new JMenuItem("?");
    
    		/* Menu Nouvelle page */
    		item11.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent arg0) {
    				c.removeAll(); // supprimer l'ancien container pour le remplacer
    								// par le nouveau
    				CreationPartie zd = new CreationPartie(null,
    						"~~ Création d'un LabyPower ~~", true);
    				CreationPartieInfo zInfo = zd.showCreationPartie();
    				int dx = 50;
    				int dy = 50;
    				if (zInfo.nbreLigne != 0 && zInfo.nbreColonne != 0) {
    					Plateau plat = new Plateau(zInfo.nbreColonne,
    							zInfo.nbreLigne, dx, dy, zInfo.taillePlateau);
    
    					Compteur essai = new Compteur();
                                            
                                            // PROBLEME
    					jf.getContentPane().add(plat); // ajout de mon plateau
    					//jf.getContentPane().add(essai); // ajout du compteur
    					//c.add(plat);
    					//d.add(essai);
    					jf.validate(); // permet la mise à jour de la fenetre
    					
    				}
    			}
    		});
    		
    
    		/* Menu Quitter */
    		item15.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent event) {
    				System.exit(0);
    			}
    		});
    
    		/* Menu A propos */
    		item21.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent arg0) {
    				JOptionPane jop = new JOptionPane();
    				String mess = "J'espère que vous vous amusez bien !\n";
    				mess += "\n   Tuteur:        ... \n";
    				mess += "   Créateur:    ... \n";
    				mess += "   Date:            ... \n";
    				jop.showMessageDialog(null, mess, "À propos",
    						JOptionPane.INFORMATION_MESSAGE, null);
    			}
    		});
    
    		/* on ajoute les objets au menu */
    		top1.add(item11);
    		top1.add(item12);
    		top1.add(item13);
    		top1.add(item14);
    		top1.add(item15);
    
    		top2.add(item21);
    
    		/* on ajoute le menu à la bar de menu */
    		menuBar.add(top1);
    		menuBar.add(top2);
    
    		/* ajout de la bar dans la fenetre */
    		jf.setJMenuBar(menuBar);
    
    		// System.out.println();
    
    		jf.setVisible(true);
    	}
    }

    Compteur.class


    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
    public class Compteur extends JPanel implements Runnable{
    	int temps = 20;
        public void run() {
        	//Code
        }
    	/*public void run() {
    		while (temps != 0) {
    			try {
    				sleep(1000);
    				temps--;
    				//repaint();
    				System.out.println(temps);
    			} catch (InterruptedException e) {
    			}
    		}
    	}*/
    	public void paintComponent(Graphics g) {
    		super.paintComponent(g);
    		this.setBounds(500,0,100,100);
    		this.setBackground(Color.red);
    	}
    }
    Donc voila je me tiens à votre disposition pour toutes questions bien évidemment.

    Cordialement Quentin

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    L'approche classique est d'utiliser un seul JPanel et de dessiner dans une image. Le travaille du JPanel consiste uniquement à afficher l'image.
    Le compteur pourrait être une image qui serait copier régulièrement sur l'image globale.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 149
    Points : 126
    Points
    126
    Par défaut
    Tu peux déclarer ta classe Compteur comme un composant JLabel et l'ajouter à ton JPanel principal. Normalement il s'actualise encore mais le clic risque de ne plus fonctionner... Peut-être faudrait-il opter pour un agrandissement de ta fenêtre afin d'afficher le compteur au dessus du labyrinthe. A toi de voir mais il y a surement une solution plus adaptée pour toi, malheureusement je ne la connais pas. :/

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 159
    Points : 52
    Points
    52
    Par défaut
    Pour le moment j'ai détourné le problème, je place mes deux JPanel dans un autre JPanel que je rentre ensuite dans mon container ... pas forcement idéal surtout que je compte rajouter une Toolbar par la suite

Discussions similaires

  1. Superposition de JPanel
    Par Mahus dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 03/06/2015, 04h19
  2. Superposition de JPANEL
    Par johnvox dans le forum Débuter
    Réponses: 3
    Dernier message: 08/12/2010, 09h58
  3. superposition de JPanels pour accélérer l'affichage
    Par Virgile le chat dans le forum 2D
    Réponses: 8
    Dernier message: 10/08/2009, 05h42
  4. Superposition JPanel dans JTabbedPane
    Par rems033 dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 23/06/2007, 13h13
  5. JPanel, EmptyBorder et Superposition
    Par pigeonus dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 19/04/2007, 15h54

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