Pb keylistener java [Résolu]

cs_ptidav 11 Messages postés dimanche 6 avril 2003Date d'inscription 26 janvier 2009 Dernière intervention - 14 nov. 2006 à 17:34 - Dernière réponse : cs_ptidav 11 Messages postés dimanche 6 avril 2003Date d'inscription 26 janvier 2009 Dernière intervention
- 15 nov. 2006 à 19:06
Bonjour,
j 'ai un pb avec l utilisation du keylistener dans un JPanel, ce JPanel est contenu dans une JFrame
et il instancie d autres JPanel qui s ajoutent sur lui. J ai fait d autres sources ou je l utilise et d habitude ca marche mais la rien ne s affiche... (j ai peut etre aussi la tete dans le code depuis trop lgtps ...).

Si qq un voit le pb. Merci d avance.

public class Tapis extends JPanel implements KeyListener {

    private Controle cont;

    public Tapis(Controle cont) {
 
        this.cont = cont;
        setLayout(new GridLayout(cont.getY(), // lignes
                cont.getX(), // colonnes
                0, // espacement hor.
                0 // espacement vert.

        ));
        for (int i = 0; i < cont.getGrille().length; i++)
        {
            add(new Domino((Piece) cont.getGrille()[i], cont),
                    BorderLayout.CENTER);// Domino est un panel
        }
        addKeyListener(this);
    }

//[...]

    public void keyPressed(KeyEvent a) {
        System.out.println("test");
    }

    public void keyReleased(KeyEvent arg0) {
        System.out.println("test");
    }

    public void keyTyped(KeyEvent arg0) {
        System.out.println("test");
    }
}
 
Afficher la suite 

5 réponses

Répondre au sujet
Twinuts 5261 Messages postés dimanche 4 mai 2003Date d'inscription 20 avril 2018 Dernière intervention - 14 nov. 2006 à 20:35
+3
Utile
Salut,

perso j'ai déjà eu des probs du genre avec des keylistener et des panel et la solution la moin prise de tete fut KeyboardAction

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Twinuts
kaloway 358 Messages postés jeudi 24 octobre 2002Date d'inscription 30 mars 2011 Dernière intervention - 14 nov. 2006 à 18:29
0
Utile
bonsoir, je pense que les dominos masquent le tapis. essais de mettre ces ligne la en commentaire :

for (int i = 0; i < cont.getGrille().length; i++)
        {
            add(new Domino((Piece) cont.getGrille()[i], cont),
                    BorderLayout.CENTER);// Domino est un panel
        }
Commenter la réponse de kaloway
Twinuts 5261 Messages postés dimanche 4 mai 2003Date d'inscription 20 avril 2018 Dernière intervention - 14 nov. 2006 à 18:33
0
Utile
Salut,

C'est simplement qu'ici ton panel Domino à un BorderLayout à center donc il recouvre compretement le panel Tapis et prend donc toujour le focus....

une solution pas superbe serait de mettre le keylistener sur ton panel Domino
une autre plus souple serait d'utiliser les KeyboardAction exemple ICI

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Commenter la réponse de Twinuts
cs_ptidav 11 Messages postés dimanche 6 avril 2003Date d'inscription 26 janvier 2009 Dernière intervention - 14 nov. 2006 à 20:21
0
Utile
re
Merci pour vos reponses, j ai essayé de mettre la ligne suivante en commentaire:

add(new Domino((Piece) cont.getGrille()[i], cont), BorderLayout.CENTER);

pas de changement meme si le panel est totalement vide, donc au premier plan, j ai meme enlevé tout dans le constructeur (a part .  addKeyListener(this); bien sur) et tjs rien, le pb viendrait il d ailleurs ? ... Je vais regarder les KeyboardAction de plus pres et vu que c est un travail noté, je prefere pas mettre le listener dans la classe Domino.
Commenter la réponse de cs_ptidav
cs_ptidav 11 Messages postés dimanche 6 avril 2003Date d'inscription 26 janvier 2009 Dernière intervention - 15 nov. 2006 à 19:06
0
Utile
Bonsoir,

KeyboardAction marche très bien, c'est cool, voila comment je l'ai utilisé si ca peut interesser des gens par la suite, par exemple j'ai une classe où il y a un JButton newGame qui sert à lancer un nouveau jeu :

//dans le constructeur
//[...]
newGame.addActionListener(this);
newGame.registerKeyboardAction(this, KeyStroke.getKeyStroke(
                KeyEvent.VK_H, Event.CTRL_MASK),
                JComponent.WHEN_IN_FOCUSED_WINDOW);
//[...] Fin du constructeur

public void actionPerformed(ActionEvent arg0) {

 if (arg0.getSource() == newGame ||
KeyStroke.getKeyStroke(KeyEvent.VK_H, Event.CTRL_MASK).isOnKeyRelease())
    {
            ig.getCont().restart(ig); //redemarrage du jeu
    }
}

Le jeu redemarre si le bouton newGame est utilisé ou si la combinaison CTRL+H est pressée.
Merci pour l'aide.
Commenter la réponse de cs_ptidav

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.