KeyListener

paf24 Messages postés 20 Date d'inscription mardi 25 février 2003 Statut Membre Dernière intervention 12 janvier 2005 - 22 sept. 2004 à 11:03
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 15 janv. 2005 à 11:23
Salut, j'ai un petit blem en java, si y'a un bosse de java dans le coin, ça serait cool de jeter un oeil furtif.

En gros, je souhaite utiliser un KeyListener sur ma fenêtre de façon globale (pas juste sur un JTextBox...), je veux que mon ecouteur se déclenche QUELQUE SOIT l'objet activé dans la fenêtre.

Ce que j'arrive à fairepour l'instant :
- activé mon keylistener sur un Component (un TextBox), mais je rappelle que c'est pas ça que je veux
- activé mon keylistener sur la fenêtre, mais seulement quand il n'y a aucun button ou zone de text dans la fenêtre, juste le layout, mais moi, une fenêtre vide ça ne m'interesse pas.

Evitez de me répondre d'activer le listener sur tout mes component de la JFrame, j'y ai pensé, c'est bourrin, je préfèrerai trouvé mieux.

Donc si quelqu'un a la soluce...

je joins un code réduit sur lequel je fais mes tests.
dans ce code, le KeyListener est lié à la JFrame, mais ça ne réagit pas :

import javax.swing.*;
import java.awt.event.*;
import java.util.*;

public class Fenetre extends JFrame implements ActionListener, EventListener
{
private JTextField text;
private JButton valid;

public Fenetre()
{
setLocation(200,200);
setSize(200,150);
getContentPane().setLayout(null);
text = new JTextField();
text.setBounds(10,10,170,20);
getContentPane().add(text);
valid=new JButton("Valider");
valid.setBounds(50,70,100,30);
valid.addActionListener(this);
valid.setActionCommand("calculer");
getContentPane().add(valid);
setVisible(true);

this.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent k)
{
System.out.println("pressed");
}
});

this.addWindowListener(new WindowAdapter() //kill le process à la fin
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}

public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand().equals("calculer"))
{
System.out.println("calculer");
}
}

public static void main(String[] args)
{
Fenetre f = new Fenetre();
}
}

voilà, avec ce code, si je presse une touche, rien ne se passe.

Paf24

7 réponses

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
23 sept. 2004 à 13:40
hello simple question pourquoi rattacher ton keylistener à ta JFrame?
vue comment tu as fais ton code cela ne peut fonctionner que si tu ratache le listener à ton JTextField

exemple
text.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent k){
System.out.println("pressed");
}
});
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
23 sept. 2004 à 14:36
sinon si tu veux absolument faire un listener sur ta JFrame essaye d'implementer l'interface keylistener
0
paf24 Messages postés 20 Date d'inscription mardi 25 février 2003 Statut Membre Dernière intervention 12 janvier 2005
23 sept. 2004 à 15:44
en fait, le but final est de relancer une partie avec la touche F2

donc ceci doit être fait quelque soit le component sélectionner.
je veux que mon F2 réagisse aussi bien quand je suis dans le JTextField que quand le JButton est sélectionné.

je pourrai très bien mettre le listener sur tous mes components, mais je cherche une solution plus "globale"

comme j'implemente la super interface EventListener, j'ai plus besoin d'implémenter keyListener car c'est une sous-interface de EventListener.

Paf24
0
p0236 Messages postés 54 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 25 avril 2006
7 janv. 2005 à 11:48
J'ai le meme soucis que toi, j'ai une fenetre et a n'importe quel moment je veux appuyer sur un touche et je veux que ca execute la fonctionnalité

Je sais le faire mais avec une bidouille, mais je voudrai le faire bien (disons!!)

Merci de ton aide
0

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

Posez votre question
paf24 Messages postés 20 Date d'inscription mardi 25 février 2003 Statut Membre Dernière intervention 12 janvier 2005
12 janv. 2005 à 13:48
dans le projet, j'avais une série de bouton (JButton) tous gérer ensemble (mêmes listeners).



je gérais le tout avec un mouse listener (mais on peut faire ça aussi avec des action listener)



bref, dans mon listener, j'ai implémenter la méthode MouseReleased, dans laquel j'ai appellé une méthode focus() de ma classe.



cette méthode focus faisait juste un this.requestFocus(); (donc appliqué à mon JPanel)





une méthode vite fait consiste à mettre un listener sur tes objets

puis dans l'actionPerformed tu fais un this.requestFocus();





dans ton construeur du ta classe extends JPanel, tu mets ton Key Listener :



this.addKeyListener(new KeyAdapter()

{


public void keyPressed(KeyEvent k)

{



if(k.getKeyCode() == KeyEvent.VK_F2)



tache_a_effectue();

}

});




bon ici, c'était un key listener qui prenais en compte que la touche F2




Paf24
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
15 janv. 2005 à 11:22
hello, il existe une methode toute simple pour le faire que j'ai
retrouvé par hazard cette semaine sur un de mes book, je ne donne pas
de code source pour le moment je vous laisse chercher comme des grand
comment l'utiliser.....(si sa galère trop je ferais un effort)



en premier lieu il faut lancer la doc java et regarder de plus pres la class JComponent dedans il existe plusieurs methodes et plusieurs constantes, pour resoudre le probleme il faut s'interresser a

la methode registerKeyboardAction et les constantes qui lui sont liée



(registerKeyboardAction est obsolète je renvoi sur elle par souci de documentation en effet c'est la seul methode qui soit expliqué comme ca)



voila mise appart peut etre donner tous le code source explicatif je ne
peux pas faire mieux cette methode(ou les methodes de remplacement) est
la seul bonne procedure simple en swing prevu par sun pour gerer ce
type de comportement
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
15 janv. 2005 à 11:23
bon dsl pour les fautes de français dites vous simplement que je ne suis ni un dico ni le becherelle
0
Rejoignez-nous