L'obtention de se concentrer sur un Composite
J'ai un JPanel
à l'intérieur d'un JFrame
. J'ai enregistré un KeyListener
, sur la base duquel je veux mettre à jour le JPanel
. Le problème que j'ai c'est que je n'arrive pas à se concentrer sur la JPanel
et donc mon KeyListener
ne fonctionne pas. Je sais déjà que le KeyListener
est fonctionnel car je me suis inscrit avec le JFrame
et il a bien fonctionné. Mon code va quelque chose comme ceci pour le moment:
myFrame.setFocusable(false);
myPanel.setFocusable(true);
myPanel.addKeyListener(myKL);
myFrame.add(myPanel);
Quelqu'un a rencontré un problème semblable? Est-il quelque chose que je suis absent en ce qui concerne ce?
P. S.: je n'ai pas de composants à l'intérieur de la JPanel
je viens de dessiner une Image sur le fond, alors j'ai besoin de mettre l'accent sur le Composite lui-même et non pas sur quelque chose à l'intérieur.
- Hmm, avec l'ajout de myPanel.requestFocus() cela fonctionne pour moi. Quelle version de Java êtes-vous en cours d'exécution?
- Peut-être poster un SSCCE(simple autonome compilable exemple) qui reproduit cette. Qui va donner aux autres quelque chose à travailler avec/ pour vous aider. J'ai aussi des avis w/ un problème, en se rétrécissant vers le bas pour le plus petit de la portée, parfois, je suis en mesure de trouver la solution moi-même.
Vous devez vous connecter pour publier un commentaire.
Bien que vous êtes en indiquant que le panneau peut être peut recevoir le focus, le panneau n'est pas en train de demander le focus. Essayez d'utiliser
myPanel.requestFocus();
.Utilisation
setFocusable(true)
et puisrequestFocusInWindow()
. Mais ce dernier doit être fait après de la fenêtre contenant le panneau est visible, pour lequel vous aurez probablement besoin d'enregistrer une fenêtre de l'auditeur et de faire lerequestFocusInWindow()
dans la fenêtre activé le code du gestionnaire.Remarque: après la fenêtre est visible, pas seulement après l'appel de
setVisible(true)
.setVisible(true)
est appelé est insuffisante?Essayer
J'ai parfois confrontés à un problème similaire. J'ai remarqué que dans certains cas, il est préférable de faire ou de demander le focus sur un contrôle spécifique dans le panneau qui est à l'intérieur du cadre (par exemple, la zone d'entrée à laquelle vous souhaitez clavier d'entrée à l'aller), plutôt que de demander le focus pour le volet lui-même.
Essayer quelque chose comme cela: