JPanel nicht zu Schlüsselereignis zu hören, wenn es eine untergeordnete Komponente mit JButton drauf

StackOverflow https://stackoverflow.com/questions/2793002

Frage

Ich arbeite an einem Map-Editor für mein College-Projekt. Und ich hatte ein Problem, dass der Karten-Panel nicht Schlüsselereignis ist zu hören, während es sein sollte. Dies geschieht, wenn ich einen ToolBarPane hinzufügen (die JPanel erweitert) mit JComponent wie JButton, JComboBox dass Geräte Action auf ihm und dem Karten-Panel (die die JPanel erstreckt) zusammen auf den Rahmen (I verwendet Border). Ich habe System.out.printin Aussage zu testen, ob der Tastendruck empfangen wird, und es wird nicht gedruckt wird, wenn ich die ToolBar entfernen, funktioniert der Schlüssel Hörer wieder, so dass die mouseListenner ist wie die keyListener deaktiviert ist, das heißt, ich kann‘ t Griff Presseveranstaltungen usw., aber die mouselistener funktioniert gut und ich kann immer noch Maus bewegen Ereignis behandeln.

Hier ist ein Screenshot, wie es ohne die ToolBarPane

funktioniert

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

Beachten Sie, dass Sie die Maus verwenden, können die Bilder auf der Karte zu setzen, können Sie auch die Bilder auswählen, können Sie die Maus wie ein Laserwerkzeug und durch Zifferntaste drücken Sie zwischen verschiedenen Bildern wechseln können, das funktioniert gut, bis ich das hinzufügen ToolBarPane, die zeigt, wie folgt aus:

img291.imageshack.us/img291/8020/failve.png (Fügen Sie bitte http vor, dass ich nur einen Hyperlink veröffentlichen kann)

(Ich kann nicht Post Bilder hier, weil ich bin ein neuer Benutzer)

Mit der ToolBarPane an war mir nicht mehr in der Lage, das Schlüsselereignis zu behandeln.

Ich denke, es könnte durch, dass der Fokus als irgendwie auf diese Platte übertragen, aber nicht sicher, ob überhaupt.

Does und Körper weiß das und kann mir helfen?

Danke sehr viel

War es hilfreich?

Lösung

Ich schlage vor, Sie verwenden, um die InputMap und WHEN_ANCESTOR_OF_FOCUSED_COMPONENT oder etwas ähnliches. Auszug aus Wie Verwenden Key Bindings :

JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
Die Komponente enthält (oder ist), um die Komponente, die den Fokus hat. Diese Eingabekarte für eine Verbundkomponente häufig verwendet

Das ist sehr robust für mich gearbeitet hat. Werfen Sie einen Blick auf meine anderen Post für weitere Informationen und aktuelle Code-Beispiele:

Tastatureingabe für ein Spiel in Java

oder dieses Tutorial:

Schwingen: Verstehen Input / Action-Maps

Andere Tipps

Sie sollten einen KeyListener werden.

Schaukel wurde entwickelt, Tastenbelegungen zu verwenden, die wesentlich flexibler ist. Schauen Sie sich meine kurze Zusammenfassung der Key Bindings , die auch einen Link enthält zum Swing-Tutorial, das conains weit mehr Details.

(Ich kann nicht Post Bilder hier, weil ich bin ein neuer Benutzer)

Ein Bild hilft nicht viel sowieso. Wenn Sie weitere Hilfe Post SSCCE , die zeigt, das Problem (nach dem obigen Vorschlag versucht).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top