---
title: "Problem med addKeyListener"
type: "forum-thread"
url: "https://www.webforum.nu/amne/java/137171-problem-med-addkeylistener"
topic: "Java"
topic_url: "https://www.webforum.nu/amne/java"
author: "xtian"
published: "2005-11-08T11:41:53.000Z"
updated: "2005-11-13T14:34:25.000Z"
replies: 4
views: 336
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/137171-problem-med-addkeylistener"
---

# Problem med addKeyListener

## #1 — xtian, 2005-11-08T11:41Z

Jag har ett problem som jag inte kan hitta någon lösning på. Jag har 2 stycken klasser, MyFrame och MyPanel, som ärver från JFrame resp. JPanel. I klassen MyPanel som jag skapar ett objekt av i klassen MyFrame vill jag lägga till en tangenbordslyssnare som känner av shift-knappen. Detta gör jag med kodstycket nedan som läggs i konstruktorn. Får inga problem vid kompileringen men inget händer när jag trycker på shift-knappen under körning av programmet. Om jag däremot lägger satserna i MyFrame klassen så fungerar det utmärkt. Någon som vet vad det beror på och kanske kan ge mig en lösning?

Anledningen till att jag vill att tangentbordslyssnaren ska ligga i klassen MyPanel är att om jag nu skulle vilja uttnyttja den klassen i något annat program så vill jag ju självklart att tangentbordskommandona också ska fungera.

import java.awt.event.KeyEvent;
import java.awt.event.KeyAdapter;

addKeyListener(
new KeyAdapter()
{
public void keyPressed( KeyEvent e )
{
if( e.isShiftDown() )
{
System.out.println("shit active");
}
}

public void keyReleased( KeyEvent e )
{
if( !e.isShiftDown() )
{
System.out.println( "shit relesed" );
}

}
}
);

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

## #2 — phonkworks, 2005-11-08T12:42Z

Kan vara ett fokus problem. Se till att din Panel har focus och pröva igen.

Mvh
phonkelito

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

## #3 — xtian, 2005-11-08T13:36Z

Tack för ditt förslag, provade att lägga till grabFocus() och requestFocusInWindow() i panelklassen men det hjälpte inte heller. Kan tillägga att jag i panelklassen dessutom har en muslyssnare som fungerar utmärkt. Så jag vet inte alls varför tangentborslyssnaren inte fungerar.

Mvh
xtian

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

## #4 — Lime, 2005-11-08T14:32Z

Det har med Event-bubbling att göra. Om du vill att JPanel ska få keyEvents så måste du säga att JFrame skall skicka vidare eventen till underliggande komponenter... men det är bara krånligt.

Hela problemet ligger i focus managern som är lite jobbig.

Kolla på <http://java.sun.com/docs/books/tutorial/uiswing/misc/keybinding.html> hur man använder keybindings istället. Det är en enklare och bättre lösning.

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

## #5 — xtian, 2005-11-13T14:34Z

Det visar sig tillslut att det ändå var ett fokusproblem. Fick lägga in requestFocusInWindow()  i muslyssnaren och då kände panelen av tengentbordstryckningarna.

Tack för all hjälp här..

Mvh
xtian

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

---

Tråden på webben: https://www.webforum.nu/amne/java/137171-problem-med-addkeylistener
