---
title: "Hur lyssnar man på \"hela\" programmet efter KeyEvent?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/java/98537-hur-lyssnar-man-på-hela-programmet-efter-keyevent"
topic: "Java"
topic_url: "https://www.webforum.nu/amne/java"
author: "mangan"
published: "2004-03-01T17:59:20.000Z"
updated: "2004-03-05T21:39:48.000Z"
replies: 2
views: 181
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/java/98537-hur-lyssnar-man-på-hela-programmet-efter-keyevent"
---

# Hur lyssnar man på "hela" programmet efter KeyEvent?

## #1 — mangan, 2004-03-01T17:59Z

Hej!

Sitter här med ett nästan helt klart program men nu återstår det ett problem som jag inte kan lösa:

Jag vill lyssna efter KeyEvent på hela min applikation om man säger så. Har testat att lägga till en KeyListener på huvud JFramen men den verkar inte nås av någon anledning,  m a o så skrivs inget ut på skärmen när jag bankar på min keyboard.
Min huvudklass där jag skapar min JFrame:

```
public class Main extends JFrame{
    public Main(){
	MyKeyListener l = new MyKeyListener();
	this.addKeyListener(l);

        //lite kod
        ......	
	FileWindow window = new FileWindow(dir1,dir2,rot);
	Controller controller = new Controller(window);
	this.getContentPane().setLayout(new BorderLayout());
	this.getContentPane().add(controller,BorderLayout.NORTH);
	this.getContentPane().add(window,BorderLayout.CENTER);
	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	this.pack();
	this.show();
    }

    private class MyKeyListener implements KeyListener {
	public void keyPressed(KeyEvent e){
 	    System.out.println("knapp tryckt");	
	}
	public void keyReleased(KeyEvent e){
 	    System.out.println("knapp tryckt");	
	}
	public void keyTyped(KeyEvent e){
 	    System.out.println("knapp tryckt");	
	}
    }

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

Någon som ser vad det kan vara?

Permalänk: https://www.webforum.nu/p/98537

## #2 — Aleph_One, 2004-03-01T20:29Z

Du kan göra så att du skapar en EventQueue och lägger in den så att alla events passerar förbi (överlagra dispatchEvent) så du kan fånga upp alla dom events du vill. Inte helt ultimat, men det fungerar.

```
import java.awt.AWTEvent;
import java.awt.EventQueue;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;

import javax.swing.JButton;
import javax.swing.JFrame;

public class GlobalListeningFrame extends JFrame
{
	public GlobalListeningFrame()
	{

		Toolkit.getDefaultToolkit().getSystemEventQueue().push(new EventQueue()
		{
			protected void dispatchEvent(AWTEvent event)
			{
				if (event.getID() == KeyEvent.KEY_PRESSED)
					System.out.println("PRESSED");
				if (event.getID() == KeyEvent.KEY_RELEASED)
					System.out.println("RELEASES");
				if (event.getID() == KeyEvent.KEY_TYPED)
					System.out.println("TYPED");

				super.dispatchEvent(event);
			}

		});

		this.getContentPane().add(new JButton("hej hopp"));

		setSize(400, 400);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}

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

Permalänk: https://www.webforum.nu/p/1288107

## #3 — mangan, 2004-03-05T21:39Z

Funkade mycket bra fast jag är inte riktigt hundra på att jag förståd vad som hände... :)

Permalänk: https://www.webforum.nu/p/1293131

---

Tråden på webben: https://www.webforum.nu/amne/java/98537-hur-lyssnar-man-på-hela-programmet-efter-keyevent
