Pb keylistener java

Résolu
cs_ptidav Messages postés 11 Date d'inscription dimanche 6 avril 2003 Statut Membre Dernière intervention 26 janvier 2009 - 14 nov. 2006 à 17:34
cs_ptidav Messages postés 11 Date d'inscription dimanche 6 avril 2003 Statut Membre Dernière intervention 26 janvier 2009 - 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");
    }
}
 

5 réponses

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
14 nov. 2006 à 20:35
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
3
kaloway Messages postés 358 Date d'inscription jeudi 24 octobre 2002 Statut Membre Dernière intervention 13 avril 2020
14 nov. 2006 à 18:29
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
        }
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
14 nov. 2006 à 18:33
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
0
cs_ptidav Messages postés 11 Date d'inscription dimanche 6 avril 2003 Statut Membre Dernière intervention 26 janvier 2009
14 nov. 2006 à 20:21
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ptidav Messages postés 11 Date d'inscription dimanche 6 avril 2003 Statut Membre Dernière intervention 26 janvier 2009
15 nov. 2006 à 19:06
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.
0
Rejoignez-nous