Changement de JPanel et perte d'écouteur

Résolu/Fermé
andredrea Messages postés 227 Date d'inscription lundi 12 octobre 2009 Statut Membre Dernière intervention 3 mars 2021 - Modifié par andredrea le 7/04/2016 à 21:57
KX Messages postés 16643 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 6 décembre 2022 - 8 avril 2016 à 19:34
Bonsoir,
je suis en train de programmer un jeu avec swing, lors du démarrage je créais un JPanel avec un ecouteur local puis une fois le bouton cliqué, je me trouve sur un nouveau JPanel (qui a remplacé entierement l'autre) or l'écouteur local qui apparatient au nouveau panel ne fonctionne pas ! (alors que quand je démarre directement sur le 2eme panel l'écouteur fonctionne)

Pourtant j'ai fais un focus sur le deuxieme panel..

Si quelqu'un connait ce type de problème, je veux bien son aide..
(une personne sur un autre forum a eu un cas similaire il y a 2 ans mais elle n'a pas obtenu de réponse)

MERCI


UP: si c'est pas très clair, plus simplement le code est ainsi:
une sous classe de Jframe ou il y a l'écouteur x
une sous classe de jpanel ou il y a l'écouteur y



1 réponse

KX Messages postés 16643 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 6 décembre 2022 2 985
7 avril 2016 à 22:35
Bonjour,

Est-ce que tu as un code pour reproduire le problème ?
0
andredrea Messages postés 227 Date d'inscription lundi 12 octobre 2009 Statut Membre Dernière intervention 3 mars 2021 3
7 avril 2016 à 23:31
public class Jeu extends JFrame {
	public PanJeu pan;
	private int width = 600;
	private int height = 600;
	private JLabel LblJouer;
	private JPanel panOuverture;
	
			
	public Jeu() {
		
		
		this.setResizable(false);
		this.setSize(width, height);
		this.setLocationRelativeTo(null);
		this.setTitle("Space Invaders");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		pan = new PanJeu(600,600);
		ouverture();
	}
	
	public void switchPan(){
		this.remove(panOuverture);
		this.add(pan);
		this.pack();
		this.setVisible(true);
		pan.setFocusable(true);
	}
	
	
	public void ouverture(){
		panOuverture = new JPanel(new FlowLayout());
		panOuverture.setBackground(Color.BLACK);
		panOuverture.setPreferredSize(new Dimension(width, height));

		// [...] SUITE DU CODE POUR LAFFICHAGE
		
		
		LblJouer = new JLabel("Jouer");
		LblJouer.setOpaque(false);
		LblJouer.setHorizontalAlignment(JLabel.CENTER);
		LblJouer.setVerticalAlignment(JLabel.CENTER);
		LblJouer.setFont(fontSmall);
		LblJouer.setForeground(Color.WHITE);
		LblJouer.addMouseListener( new MouseListener() {
			
			public void mouseClicked(MouseEvent e){
				//System.out.println("oui");
				switchPan();
				LblJouer.removeMouseListener(this);
			}
			public void mouseEntered(MouseEvent e){
				LblJouer.setForeground(Color.GREEN);
			}
			public void mouseExited(MouseEvent e){
				LblJouer.setForeground(Color.WHITE);
			}
			public void mousePressed(MouseEvent e){
			}
			public void mouseReleased(MouseEvent e) {
			}
        } );
		
		//[...]
		
		
		this.add(panOuverture);
		this.pack();
		this.setVisible(true);
		//panOuverture.setFocusable( true );
	}
	
0
andredrea Messages postés 227 Date d'inscription lundi 12 octobre 2009 Statut Membre Dernière intervention 3 mars 2021 3
7 avril 2016 à 23:32
Bonsoir, ça m'ennuie un peu de mettre entierement mes codes car après a force d'en poster sur ce forum je pourrais devenir identifiable et ce n'est pas ce dont j'ai envie lol

je ne sais pas si ca peut vous suffire, sinon je peux vous envoyer un mp
0
andredrea Messages postés 227 Date d'inscription lundi 12 octobre 2009 Statut Membre Dernière intervention 3 mars 2021 3
7 avril 2016 à 23:35
public class PanJeu extends JPanel{
	Timer timer;
	private BufferedImage imCanon;
	private BufferedImage imTir;
	private boolean tir;
	private Point coordCanon;
	private Point coordTir;
	private Alien alien;
	private final int bordD;
	private final int bordG;
	private final int bordH;
	private final int bordB;
	private int vitesse = 800;
	private Timer destruction;
	private Timer moveAlien;
	private int nbAliens = 55;
	private boolean actionDead = false;
	private boolean actionMoveAlien = false;
	private int move = 10; //pour indiquer dans quel sens se déplace les aliens
	private int vies = 3;
	private int score = 0;
	private int imMove = 2; //pour changer l'image des aliens quand ils bougent
	private Font customizedFont;

	public PanJeu(int width,int height) {
		// TODO Auto-generated constructor stub
        alien = new Alien(this,1,width/7,height/7);
		setBackground(Color.BLACK);
		setPreferredSize(new Dimension(600, 600));
		bordD =(int)(width/1.0734);
		bordG =(int)(width/28.49);
		bordH = (int) (height/9);
		bordB = (int) (height/1.05)-5;
        
        tir = false;
        double y = height/ 1.12;
        coordCanon = new Point( (width/2)-19, (int)y );
        
		timer = new Timer(30, new ActionListener() {

            public void actionPerformed( ActionEvent e ) {
                repaint();
            }
        } );
		timer.start();
		destruction = new Timer(200, new Destruction());
		moveAlien = new Timer(vitesse, new MoveAlien());
		
		addKeyListener( new KeyAdapter() {

            public void keyPressed( KeyEvent e ) {
                switch ( e.getKeyCode() ) {
                    case KeyEvent.VK_LEFT:
                    	if (coordCanon.x+7 >= bordG){
                        	coordCanon.x-=7;
                    	}
                        break;
                    case KeyEvent.VK_RIGHT:
                    	if (coordCanon.x+7 <= bordD){
                    	coordCanon.x+=7;
                    	}
                        break;
                    case KeyEvent.VK_SPACE:
                    	System.out.println("BON");
                    	tirer();
                    	break;
                }
            }
        } );
	}

         //[...]

   } 
0
andredrea Messages postés 227 Date d'inscription lundi 12 octobre 2009 Statut Membre Dernière intervention 3 mars 2021 3
8 avril 2016 à 13:34
Vous savez ce que ça pourrait être ?
0
andredrea Messages postés 227 Date d'inscription lundi 12 octobre 2009 Statut Membre Dernière intervention 3 mars 2021 3
8 avril 2016 à 13:47
J'AI TROUVE ! Il suffisait d'utiliser pan.requestFocusInWindow(); à la place de pan.setFocusable(true);
0