2010-05-08 23 views
1

Je travaille sur un éditeur de carte pour mon projet de collège. Et j'ai eu un problème que le panneau de carte n'écoute pas l'événement principal pendant qu'il devrait. Cela se produit lorsque j'ajoute un ToolBarPane (qui étend JPanel) avec JComponent tel que JButton, JComboBox qui implémente ActionListener sur lui et le panneau de carte (qui étend le JPanel) ensemble sur le cadre (j'ai utilisé BorderLayout). J'ai une instruction System.out.println pour tester si la touche est pressée, et elle n'imprime pas, si je supprime la barre d'outils, l'écouteur de touches fonctionne à nouveau, de même le mouseListenner est désactivé comme le keyListener, ce qui signifie que je peux ' t gérer les événements de presse etc, mais le mouseListener fonctionne bien et je peux toujours gérer l'événement de déplacement de la souris.JPanel n'écoute pas d'événement clé quand il y a un composant enfant avec JButton dessus

Voici une capture d'écran comment cela fonctionne sans ToolBarPane

http://img684.imageshack.us/img684/3232/sampleku.png

Notez que vous pouvez utiliser la souris pour mettre des images sur la carte, vous pouvez également sélectionner des images en utilisant la souris comme un laser outil, et en appuyant sur la touche numérique, vous pouvez basculer entre les différentes images, cela fonctionne bien jusqu'à ce que j'ajoute la ToolBarPane qui montre comme ceci:

img291.imageshack.us/img291/8020/failve.png (s'il vous plaît ajouter http avant cela, je peux seulement poster un lien hypertexte)

(je ne peux pas poster des images ici parce que je suis un nouvel utilisateur)

Avec le ToolBarPane sur je ne parvenais plus à gérer l'événement clé.

Je suppose que cela pourrait être par le fait que l'accent a été transféré à ce panneau en quelque sorte, mais pas sûr du tout.

Le corps et le corps le savent-ils et peuvent-ils m'aider?

Merci beaucoup

Répondre

4

Je vous suggère d'utiliser le InputMap et WHEN_ANCESTOR_OF_FOCUSED_COMPONENT ou quelque chose de similaire. Extrait de How to Use Key Bindings:

JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
Le composant contient (ou est) le composant qui a le focus. Cette carte d'entrée est couramment utilisée pour un composant composite

Cela a fonctionné de manière très robuste pour moi. Jetez un oeil à mon autre poste pour plus d'informations et des exemples de code réel:

Keyboard input for a game in Java

ou ce tutoriel:

Swing: Understanding Input/Action Maps

0

Vous ne devriez pas utiliser un KeyListener.

Swing a été conçu pour utiliser des liaisons de touches, ce qui est beaucoup plus flexible. Consultez mon résumé rapide de Key Bindings qui comprend également un lien vers le tutoriel Swing qui contient beaucoup plus de détails.

(je ne peux pas poster des images ici parce que je suis un nouvel utilisateur)

Une image ne permet pas beaucoup de toute façon.Si vous avez besoin de plus d'aide poster votre SSCCE qui montre le problème (après avoir essayé la suggestion ci-dessus).