J'ai une sous-classe de i ajouter un objet de Comment puis-je faire répondre à la touche Presse? P> P> P> P> P> > jframe code> qui utilise une classe étendue de
jPanel code>
helloworld code> à la trame -
app.add (helloworld); code>. Maintenant, lorsque j'appuie sur n'importe quelle clé de clavier, les méthodes code> Keylistener CODE> sont appelées et il semble que
helloworld code> n'a pas la mise au point de la fenêtre. J'ai aussi essayé d'invoquer
helloworld.requestfocusinwindow (); code> mais ne répond toujours pas. P>
4 Réponses :
jPanel n'est pas concentrée par défaut. C'est-à-dire qu'il ne peut pas répondre aux événements liés à la focalisation, ce qui signifie qu'il ne peut pas répondre aux keyevents. P>
Je suggérerais d'essayer de se configurer sur le volet vers vrai et essayer à nouveau. Assurez-vous de cliquer sur le panneau pour vous assurer qu'il reçoive la mise au point. P>
Comprendre cependant, vous obtiendrez des problèmes de traversée étranges, car le panneau recevra désormais la mise au point de saisie, car l'utilisateur navigue à travers vos formulaires, ce qui semble que l'accent a été perdu de l'endroit où. P>
aussi, Keylistener code> s tendance à ne pas être peu fiable dans ce type de situation (en raison de la manière dont le gestionnaire de focus fonctionne). P>
Avez-vous défini que keylistener code> pour votre panneau
helloworld code> serait ce panneau lui-même? De plus, vous devez probablement définir ce panneau concentré. Je l'ai testé par ce code et il semble fonctionner comme il se doit
class HelloWorld extends JPanel implements KeyListener{
public void keyTyped(KeyEvent e) {
System.out.println("keyTyped: "+e);
}
public void keyPressed(KeyEvent e) {
System.out.println("keyPressed: "+e);
}
public void keyReleased(KeyEvent e) {
System.out.println("keyReleased: "+e);
}
}
class MyFrame extends JFrame {
public MyFrame() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(200,200);
HelloWorld helloWorld=new HelloWorld();
helloWorld.addKeyListener(helloWorld);
helloWorld.setFocusable(true);
add(helloWorld);
setVisible(true);
}
public static void main(String[] args) {
new MyFrame();
}
}
n'oubliez pas de grabfocus () code> si vous avez des Mouselisteners personnalisés
simple que vous devez ajouter
Ajoutez ceci dans la méthode de MyFrame;
this.addKeyListener(helloWorld);
Regardez dans Bindings de clés . Peut ou peut ne pas résoudre le problème, mais une approche généralement meilleure pour la balançoire.