J'ai un JFrame avec 3 panneaux. J'adresse une classe App, puis ajoutez trois panneaux à elle, comme ceci:Java - JPanel et KeyListener Problème
JPanel controlButtonsPanel = new GameControlButtons();
controlButtonsPanel.setPreferredSize(new Dimension(801,60));
controlButtonsPanel.setBorder(new LineBorder(Color.white, 1));
constraints.anchor = GridBagConstraints.NORTHWEST;
constraints.weightx = 2;
constraints.weighty = 0.3;
this.add(controlButtonsPanel, constraints);
JPanel tempP = new JPanel();
/`/ *** I'm going to create a Jpanel subclass for this, too, I just haven't yet.`
tempP.setPreferredSize(new Dimension(500,838));
tempP.setBorder(new LineBorder(Color.white, 2));
constraints.anchor = GridBagConstraints.NORTHEAST;
constraints.weightx = 1;
constraints.weighty = 2;
this.add(tempP, constraints);
JPanel graphicsPanel = new RoofRunnerGame("Ken");
constraints.anchor = GridBagConstraints.SOUTHWEST;
constraints.weightx = 2;
constraints.weighty = 1;
graphicsPanel.setBorder(new LineBorder(Color.white, 1));
graphicsPanel.setPreferredSize(new Dimension(800,800));
graphicsPanel.requestFocus();
this.add(graphicsPanel, constraints);
J'ai JPanel étendu pour les GameControlButtons et les classes de RoofRunnerGame. J'ai ajouté un mouselistener à l'ancien. Et j'ai ajouté un écouteur souris et un écouteur clé à ce dernier.
** Le problème:. Les auditeurs de souris fonctionnent très bien pour les deux, mais l'auditeur clé does't semblent écouter mon panneau de RoofRunnerGame **
J'ai trouvé deux solutions possibles en ligne, mais a voulu demander d'abord .
1) On appelait requestFocus() dans la sous-classe RoofRunnerGame. Le problème avec ceci est qu'une fois que j'ai cliqué sur un panneau différent, il perd le focus. (C'est un correctif à court terme.)
2) Une autre chose mentionnée était d'utiliser keyBindings. Je ne les ai jamais utilisés auparavant. Je le ferai si vous le recommandez, mais préféreriez continuer à utiliser keyListener si c'est possible.
Alors, qu'en pensez-vous? Est-ce que je peux garder le panneau de RoofRunnerGame à KEY à l'écoute?
Qu'en est-il des raccourcis clavier? Quand et pourquoi sont-ils utilisés? Sont-ils supérieurs aux keyListeners dans ce cas ?? –
@Dan James: Les exemples que j'ai donnés concernent les raccourcis clavier. Ils sont meilleurs car ils utilisent mieux les actions (vous pouvez réutiliser la même action pour les boutons, éléments de menu), vous pouvez spécifier quand un composant doit recevoir un événement d'entrée (quand il est focalisé ou quand il est dans une fenêtre focalisée) etc. sont un niveau d'abstraction plus élevé que les auditeurs clés. –