Auf Funktionstaste reagieren?

mariaT

Grünschnabel
Hallo Leute,

ich würde gerne auf eine Funktionstaste (z.B. F6) reagieren, um einen Fokuswechsel vorzunehmen.

Zu diesem Zweck habe ich meinem textPane einen KeyListener zugewiesen, der zwar auf Buchstaben reagiert, aber nicht auf F6.

Muss man bei Funktionstasten anders vorgehen?


Code:
// Initialisierung in init() des Applets

textPane.addKeyListener(new MyKeyListener());


// mein Listener:

	private class MyKeyListener implements KeyListener {		
		
		public void keyReleased(KeyEvent e){			
				
			
			int ch = e.getKeyChar();
			
			if(ch == KeyEvent.VK_F6){
				System.out.println("F6 pressed.");
			}
			
			if(ch == 'a'){

				System.out.println("a pressed.");
			}
			
		}
		
		public void keyPressed(KeyEvent e){			
		}

		public void keyTyped(KeyEvent e){						
		}		
	}
Und: Noch schöner wäre es, wenn nicht nur das TextPane, sondern das gesamte Applet auf "F6" reagieren würde. Gibt es auch eine Möglichkeit, dem gesamten Applet einen KeyListener zuzuweisen?

Ich habe das bereits mit
Code:
this.getContentPane().addKeyListener(new MyKeyListener());
versucht, allerdings erfolgt keine Reaktion. Weiß jemand zufällig, wie das geht?

Vielen Dank für eure Hilfe,

Maria
 

flashray

Erfahrenes Mitglied
Hallo Maria,

hier ein Beispiel, mit vielen Implementierungsmöglichkeiten von KeyListener und KeyStroke.

Java:
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.*;

public class KeylistenerANDKeystrokeExample extends JFrame {
	
	private JTextArea tArea = new JTextArea();
	
	public KeylistenerANDKeystrokeExample() {
		super("Keylistener AND Keystroke Example");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setLocationByPlatform(true);
		this.setAlwaysOnTop(true);
		this.setSize(300, 500);

		tArea.addKeyListener(new KeyListener(){

			public void keyTyped(KeyEvent e) {
				if (e.getKeyChar() == '1') {
					tArea.append("keyTyped:" + e.getKeyChar() + "\n");
				}	
			}
			public void keyPressed(KeyEvent e) {
				if (e.getKeyCode() == KeyEvent.VK_F1)
					tArea.append("keyPressed:" + KeyEvent.getKeyText(e.getKeyCode()) + "\n");
				if (e.isAltDown()
						&& e.getKeyCode() == KeyEvent.VK_B){
					tArea.append("keyPressed:Alt " + e.getKeyChar() + "\n");
				}
			}
			public void keyReleased(KeyEvent e) {
				
			}
		});
		
		tArea.getInputMap().put(KeyStroke.getKeyStroke("F2"), "actionName1");
		tArea.getActionMap().put("actionName1", new AbstractAction("actionName1") {
			public void actionPerformed(ActionEvent evt) {
				tArea.append("KeyStroke:F2\n");
			}
		});
		tArea.getInputMap().put(KeyStroke.getKeyStroke("ctrl M"), "actionName2");
		tArea.getActionMap().put("actionName2", new AbstractAction("actionName2") {
			public void actionPerformed(ActionEvent evt) {
				tArea.append("KeyStroke:strg m\n");
			}
		});
		
		this.add(new JScrollPane(tArea));
		this.setVisible(true);
	}

	public static void main(String[] args) {
		new KeylistenerANDKeystrokeExample();
	}

}


Vg Erdal
 

mariaT

Grünschnabel
Vielen Dank, Erdal!

getKeyCode() in keyPressed() ist also der Trick!
flashray hat gesagt.:
Code:
public void keyPressed(KeyEvent e) {
	if (e.getKeyCode() == KeyEvent.VK_F1)
		tArea.append("keyPressed:" + KeyEvent.getKeyText(e.getKeyCode()) + "\n");
	}
}

Du weißt aber nicht zufällig auch noch, wie man die Key-Belegung global für das gesamte Applet zuweist und nicht nur für einzelne Komponenten, oder?

viele Grüße,
Maria
 

Neue Beiträge