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:
/*
* 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");
}
}
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
263 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9