Changement de JPanel et perte d'écouteur
Résolu
andredrea
Messages postés
278
Statut
Membre
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
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
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
A voir également:
- Changement de JPanel et perte d'écouteur
- Changer de dns - Guide
- Changement d'heure - Guide
- Changement d'écriture facebook - Guide
- Reinstaller windows sans perte de données - Guide
- Changement clavier azerty - Guide
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 ); }je ne sais pas si ca peut vous suffire, sinon je peux vous envoyer un mp
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; } } } ); } //[...] }