---
title: "hur kopplar man en keyListener till en JApplet?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/java/50573-hur-kopplar-man-en-keylistener-till-en-japplet"
topic: "Java"
topic_url: "https://www.webforum.nu/amne/java"
author: "jme"
published: "2002-08-16T20:23:15.000Z"
updated: "2002-08-26T11:55:38.000Z"
replies: 5
views: 313
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/50573-hur-kopplar-man-en-keylistener-till-en-japplet"
---

# hur kopplar man en keyListener till en JApplet?

## #1 — jme, 2002-08-16T20:23Z

Hej!

Jag har försökt koppla en keyListener till en JApplet.

```

public class Blabla extends JApplet implements KeyListener
...
...
...

getContentPane().addKeyListener(this);
```

det funkar inte med ovanstående kod men om jag kopplar den till en JTextArea så funkar det prima.

Var och hur gör jag fel?

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

## #2 — Lime, 2002-08-20T09:20Z

Grejen är att du inte skall försöka lyssna på contentPane() eftersom den containern är implementerad så att den bara bubblar vidare alla events. Orsaken till det är att man alltid lägger andra komponenter över contentPane och skulle man lyssna på contentePane så skulle det kunna bli fel. Ska jag lyssna på JTextArean eller contentPane.

Vad man då gör, om man t.ex. gör ett spel som ska lyssna på knapptryckningar, är att man kopplar en generell lyssnare till JAppleten, alltså själva framen, såhär:

```php
/*
 * KeyListenerApplet.java
 *
 * Created on den 20 augusti 2002, 10:39
 */

/**
 *
 * @author  Lime
 */

import java.awt.event.*;
import javax.swing.*;
import java.awt.*;

public class KeyListenerApplet extends javax.swing.JApplet implements KeyListener {
    
    JLabel label = new JLabel("No button pressed");
    public void init(){  
     this.addKeyListener(this);
     this.getContentPane().add(label, BorderLayout.NORTH);
    }
    
    
    /** Creates a new instance of KeyListenerApplet */
    public KeyListenerApplet() {
    }
    
    public void keyPressed(java.awt.event.KeyEvent keyEvent) {
        label.setText(keyEvent.getKeyChar() + " pressed");
    }
    
    public void keyReleased(java.awt.event.KeyEvent keyEvent) {
        label.setText(keyEvent.getKeyChar() + " released");
    }
    
    public void keyTyped(java.awt.event.KeyEvent keyEvent) {
        label.setText(keyEvent.getKeyChar() + " typed");
        
    }
    
}
```

 

Då funkar det.

/Lime

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

## #3 — jme, 2002-08-20T09:25Z

Tack för förklaringen. :)

Jag lyckades dock få det att fungera.

Om jag vet rätt så kan man strunta i att inkludera "this." för det gör väl kompilatorn annars?

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

## #4 — Lime, 2002-08-20T10:38Z

Jepp, man kan göra det, men det ökar läsbarheten tycker jag.

getContentPane() och this.getContentPane() är likvärdiga.

Men ponera att du har en variabel som du får in i anropet public void getMeThis(int alfa) som skall läggas i int alfa i din klass... alltså

```php
int alfa;

public void getMeThis(int alfa){

alfa = alfa;

}
```

Detta funkar inte för då refererar du till samma alfa. Där vill man skriva this.alfa = alfa.

Inte riktigt samma sak, men jag tycker att this är smutt att använda... :-)

/Lime

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

## #5 — jme, 2002-08-25T15:47Z

En följdfråga... :)

Jag fick det att fungera med this.addKeyListener(this);

Men nu när jag försöker skapa en layout

```

getContentPane().setLayout(new BorderLayout() );

getContentPane().add(btn = new JButton("Start game"), BorderLayout.SOUTH );
```

så slutar knapparna att fungera.

om jag kommenterar ovanstående rader så fungerar allt igen...

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

## #6 — Lime, 2002-08-26T11:55Z

Man bör inte göra "btn = new JButton("Start game"), BorderLayout.SOUTH".

Skapa knappen först, om du tänkte dig att du skulle göra lite annat med den. Alltså

btn_start = new JButton("Start Game");
getContentPane().add(btn, BorderLayout.SOUTH);

Vad din kod gör är att skapa en orefererad variant av knappen... Lite svårt att förklara. Gör inte initieringar och tilldelningar i samma sats om du kan undvika det... Det är fult.

/Lime

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

---

Tråden på webben: https://www.webforum.nu/amne/java/50573-hur-kopplar-man-en-keylistener-till-en-japplet
