KeyListener

Luk10

Top Contributor
Grüße,

Da ich das How to wirte a Key Listener von The Java Tutorials überhaupt nicht verstehe muss ich hier nachfragen:

Wo melde ich einen KeyListener an, damit er ActionPerformed abfeuert sobald die Taste gedrückt wurde?
Wie kann ich die Taste festlegen, welche das Event auslöst?

Danke,
-Luk10-
 
Ziel ist es bei Enter oder Buttondruck (Durch anklicken) ein ActionEvent abzufeuern, bzw eine Methode aufzurufen!
Leider verstehe ich deinen Link nicht besonders gut, weil mir dazu die Grundlagen von Swing fehlen ...

Was ist der Unterschied zwischen Action und Inputmaps? Hab leider noch nie was Key Binding gehört ...

Java:
component.getInputMap().put(KeyStroke.getKeyStroke("F2"),
                            "doSomething");
component.getActionMap().put("doSomething",
                             anAction);

Was soll "doSomething" und anAction darstellen?

Danke,
-Luk10-
 
Ziel ist es bei Enter oder Buttondruck (Durch anklicken) ein ActionEvent abzufeuern, bzw eine Methode aufzurufen!
Wenns dir nur darum geht dann reicht dir schon folgendes:
Java:
		button.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("Ich wurde gedrückt!");
			}
		});
Die anderen beiden Fragen beantwortet dir das Tutorial.
 
Genauso registrieren. Hat 3 andere Methoden.

Java:
public interface KeyListener extends EventListener {

    /**
     * Invoked when a key has been typed.
     * See the class description for {@link KeyEvent} for a definition of 
     * a key typed event.
     */
    public void keyTyped(KeyEvent e);

    /**
     * Invoked when a key has been pressed. 
     * See the class description for {@link KeyEvent} for a definition of 
     * a key pressed event.
     */
    public void keyPressed(KeyEvent e);

    /**
     * Invoked when a key has been released.
     * See the class description for {@link KeyEvent} for a definition of 
     * a key released event.
     */
    public void keyReleased(KeyEvent e);
}

Das KeyEvent enthält den Tastencode. Aber ein KeyEvent wird nur gefeuert, wenn der Component, auf dem der Listener registriert ist, den Focus hat.
 
Was ist der Unterschied zwischen Action und Inputmaps? Hab leider noch nie was Key Binding gehört ...

Java:
component.getInputMap().put(KeyStroke.getKeyStroke("F2"),
                            "doSomething");
component.getActionMap().put("doSomething",
                             anAction);

Was soll "doSomething" und anAction darstellen?

Danke,
-Luk10-
Ist Dir die Verwendung / der Nutzen von Maps bekannt?

In der InputMap sind alle Tastatureingaben enthalten auf die reagiert werden soll. In der ActionMap sind alle Aktionen enthalten mit denen reagiert werden soll.
Code:
doSomething
ist in diesem Fall der Name der Action und somit die ID
Code:
anAction
ist die Action selbst, die ausgeführt wird.

Konkret auf das Bsp. bezogen bedeutet es: Wenn F2 gedrückt wird reagiere mit der Action namens doSomething. Unter diesem Namen findet man in der ActionMap die Action anAction.
 
Aber ein KeyEvent wird nur gefeuert, wenn der Component, auf dem der Listener registriert ist, den Focus hat.

Das sagt mir leider nichts ... Wie lege ich den Focus auf meinen Button bei dem ich den Keylistener registriere?

Wie kann ich dem Event entnehmen, welche Taste gedrückt wurde und muss ich dann noch vergleichen um nur bei "Enter" wirklich meine Methode aufzurüfen?

Danke für die vielen aber (oft) viel zu komplizierten Antworten.
@ Michael...
Ja das verstehe ich ungefähr will das aber nicht umsetzten :O

-Luk10-
 
Ich will nur innerhalb meiner Klasse, die von JFrame erbt, auf den Tastendruck reagieren, also nur in dem Fenster ...

Geht das nicht einfacher :C
 
Geht das nicht einfacher :C
Noch einfacher? ;-)

Für sowas sind die KeyBindings ja da.
- Man muss eine Action definieren - was ja der Defintion eines ActionListeners entspricht. (fünf Zeilen Code)
- Der InputMap einer Komponente sagen, auf welchen Tastendruck man reagieren will (1 Zeile Code)
- In der ActionMap der Komponente die definierte Action hinzufügen (1 Zeile Code)
==> mit nur sieben Zeilen Code hat man definiert wie man auf einen Tastendruck reagieren will.
 
Hier, vielleicht hift dies.

Java:
public class Test extends JFrame {

private KeyListener keyListener = null;

public Test() {
        addKeyListener(getKeyListener());
}

public KeyListener getKeyListener() {
		if (keyListener== null)
			keyListener= new Listener();
		return keyListener;
	}



class Listener implements KeyListener {

		public void keyTyped(KeyEvent e) {
		}

		public void keyPressed(KeyEvent e) {
			if(e.getKeyCode() == KeyEvent.VK_ENTER) {
  // irgendwas
			}
		}

		public void keyReleased(KeyEvent e) {
		}
	}
}
 
Zuletzt bearbeitet:

Zurück
Oben