Wie stellen Sie key bindings für java.das awt.Rahmen?

Hintergrund

Meinem Fenster ist ein java.das awt.Rahmen und innerhalb des Rahmens sind zwei Platten (java.das awt.Panel). Ich versuche es so zu machen, dass das Fenster Griffe Knöpfe ich drücken.

Versuchen, Die Nummer 1

Versuchte ich mit einem KeyListener, so dass der Rahmen implementieren, der KeyListener. Ich habe den KeyListener an den Frame, aber der KeyListener-Funktionen nichts, wenn ich den gedrückten Tasten. (Ich habe versucht, drucken mit System.aus.println().)

Versuch Nummer 2

Ich habe versucht, nach diesem tutorial: http://tips4java.wordpress.com/2008/10/10/key-bindings/ . Hier ist mein Versuch, behandeln Sie die LEERTASTE drücken:

public void registerActions(){                                  //01
  Action myAction = new AbstractAction(){                       //02
    @Override                                                   //03
    public void actionPerformed(ActionEvent e) {                //04
      System.out.println("GREAT SUCCESS!");                     //05
    }                                                           //06
  };                                                            //07
  KeyStroke key = KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0); //08
  component.getInputMap().put(key, "myAction");                 //09
  component.getActionMap().put("myAction", myAction);           //10
}                                                               //11

Das Hauptproblem ist, dass ich don T wissen, was 'Komponente' werden sollten, die in den Zeilen 09 & 10, weil meine Anwendung keine JComponents.

Meine Frage

Gibt es eine Möglichkeit, dies zu tun, ohne mit swing Komponenten? Oder gibt es einen anderen Weg, damit umzugehen-Taste drückt?

  • Ich bin neugierig, warum Sie nicht mit Swing. Ist es eine legacy-app?
  • Ich bin schließlich macht mein Programm multithreaded, und ich habe gehört, dass Swing nicht thread-safe.
  • Die thread-Sicherheit ist in Bezug auf GUI-updates, nicht dass Sie nicht verwenden können threads. Es gibt viele Quellen über das web, die Sie Lesen können, um zu lernen, wie man mit threads, wenn mit Swing.
  • Versuchen Sie es mit entweder den root-Bereich oder content-Bereich. Denken Sie daran, untergeordnete Komponenten verbrauchen-Taste stokes, bevor Sie Sie erreichen
  • Leider getContentPane() und getRootPane() sind nicht verfügbar für java.das awt.Frame oder java.das awt.Panel.
  • Wechseln Sie einfach auf die Schaukel für Ihre UI-statt AWT. Sie sollten nicht mehrere Threads zum aktualisieren einer AWT-Benutzeroberfläche entweder
  • Warum verwendest du AWT-Klassen?
  • Ich bin Herumspielen mit dem Spieler bewegt ein Quadrat auf dem Bildschirm, dann drücken Sie die Leertaste, um einen Kreis zu erstellen gehen in alle Richtungen und in der Lage sein zu erkennen, wenn der Kreis trifft die Dinge. Wie würden Sie vorschlagen, ich mache das anders???
  • Ich würde mit dem Schalter ein JPanel statt. Gelten die KeyBindings direkt und verwenden Sie es paintCompont Methode zu malen Sie Ihre Grafiken. Sie müssen sicherstellen, dass die Platte als Isoliertes
  • Ich werde versuchen, dass. Danke für die Anregung!

InformationsquelleAutor NoBrainer | 2012-09-15
Schreibe einen Kommentar