AWT KeyListener bekommt keine Signale

earlgrey_tea

Aktives Mitglied
Hallo an alle,

ich hatte bereits vor ca einer Woche ein Problem mit den KeyEvents in Java. Glücklicherweise lies sich der Überltäter in meinem Programmtext schnell finden.

Nun habe ich eine zweite Version meines Pong Klons geschrieben und möchte diesen selbstverständlich auch über KeyListener und Events steuern. Leider kommen die Tastenanschläge nicht beim Listener an. Dieser soll auf dem gesamten Fenster lauschen; er ist also nicht an eine bestimmte Komponente gebunden (Deshalb erzeuge ich ihn im Kosntruktor).

Java:
//package MyPong;

import java.awt.*;
import java.awt.event.*;
import java.awt.Graphics;


/**
 * @author thorsten
 *
 */

public class TestBall extends Frame implements Runnable{
// Verbunddatentypen:
Thread mythread;

// Konstanten
public final int WAIT = 50;
public final int PADDLEHEIGHT = 40;
public final int PADDLEWIDTH = 5;
public final int BALLHEIGHT = 10;
public final int BALLWIDTH = 10;

// Steuerungsvariablen
boolean rungame = true;

// FensterWerte
int maxX, maxY, minX, minY, middleY;

// PaddleVariablen
int p1x, p1y, p2x, p2y;
int p1maxX;
int p2maxX;
int paddle1_mv, paddle2_mv;

// BallVariablen
int x ; // definiert die StartPosition
int y ; //              " s.o
int speedX = 10;
int speedY = 5;
int punkte_Sp1 = 0;
int punkte_Sp2 = 0;

public TestBall (){
setTitle("Der hüpfende Ball");
setSize(100, 100);
setLayout(null);
setBounds(10,10,300,300);
setVisible(true);
setBackground(Color.black);

// Ermittelt wichtige Werte des BESCHREIBBAREN Fensters
maxX=getSize().width-getInsets().left-getInsets().right;
maxY=getSize().height-getInsets().top-getInsets().bottom;
minX=getInsets().left;
minY=getInsets().top;
middleY = (maxY + minY) / 2;

// Hier werden die Bedienmethoden für das Fenster, etc bereitgestellt.
addWindowListener(new WindowAdapter(){
            public void windowClosing (WindowEvent e){
                System.exit(0);
            }
        });

addKeyListener(new Tastatur());

}

public void paint(Graphics g){

g.setColor(Color.red);
g.drawString("Punkte Sp1: " + Integer.toString(punkte_Sp1), minX, minY + 20);
g.drawString("Punkte Sp2: " + Integer.toString(punkte_Sp2), maxX - 90, minY + 20);

// Paddle 1
g.setColor(Color.white);
g.fillRect(p1x, p1y, PADDLEWIDTH, PADDLEHEIGHT);

// Paddle 2
g.setColor(Color.white);
g.fillRect(p2x, p2y, PADDLEWIDTH, PADDLEHEIGHT);

// Ball
g.setColor(Color.white);
g.fillOval(x, y, BALLHEIGHT, BALLWIDTH);

if (!(rungame)){
    g.setColor(Color.yellow);
    g.drawString("PAUSE", (maxX + minX) / 2, middleY);
}
}

public void moveBall (){
   if (x <= minX || x >= maxX)
   {
       speedX *= -1;
   }
   if (y <= minY || y >= maxY){
       speedY *= -1;
   }

   x+=speedX;
   y+=speedY;

}

public void movePaddle (){
    // ggf. die Methode Kollision Paddle nennen
    if (p1x >= minX){
        p1x = minX;
    }
    if (p2x >= minX){
        p2x = minX;
    }
    if (p1maxX <= maxX){
        p1maxX = maxX;
    }
    if (p2maxX <= maxX){
        p2maxX = maxX;
    }
    // noch nicht instanziert!!!
    p1x += paddle1_mv;
    p2x += paddle2_mv;
}

public void initializeGame(){
 // Initialisiere Startpositionen des Balls:
x = minX + 10;
y = minY + 15; // sonst verschwindet der Ball in der oberen Leiste

// Initialiere die Werte des Schlägers
p1x = minX;
p1y = middleY;
p2x = maxX;
p2y = middleY;
p1maxX = p1x + PADDLEHEIGHT;
p2maxX = p2x + PADDLEHEIGHT;
}

public boolean ballImAus (){
    // quasi die schaut, ob der Ball im Aus gelandet ist
    return false;
}

public void run(){
    while (true ){
        try {
        mythread.sleep(WAIT);
        } catch (InterruptedException ex) {}
        while (rungame){
                try {
                    mythread.sleep(WAIT);
                } catch (InterruptedException ex) {}
                moveBall();
                repaint();
                System.out.println(rungame);
        }
    }
}
    
public class Tastatur extends KeyAdapter {
    public void KeyPressed (KeyEvent e){
        System.out.println("KeyEvent: " + e.getKeyCode());
        System.out.println("KeyEvent: " + e.getKeyCode());
        if (e.getKeyCode()==KeyEvent.VK_ESCAPE){
            System.out.println("KeyEvent: " + e.getKeyCode());
            System.exit(0);
        }
        if (e.getKeyCode()==KeyEvent.VK_P){
            System.out.println("KeyEvent: " + e.getKeyCode());
            rungame = !(rungame);
        }
    }
    public void KeyTyped (KeyEvent e){
        if (e.getKeyCode()==KeyEvent.VK_ESCAPE){
            System.out.println("KeyEvent: " + e.getKeyCode());
            System.exit(0);
        }
        if (e.getKeyCode()==KeyEvent.VK_P){
            System.out.println("KeyEvent: " + e.getKeyCode());
            rungame = !(rungame);
        }
    }
}
    public static void main(String[] args) {
        TestBall b = new TestBall();
        b.initializeGame();
        b.run();

          }

}

Innerhalb der run() lasse ich mir den aktuellen Wert der variablen rungame ausgeben, die bei einem KeyEvent eigentlich ihren Zustand ändern müsste.

Hier nochmal die wichtigen Zeilen:

[JAVA=66]
addKeyListener(new Tastatur());
[/code]

[JAVA=164]
public class Tastatur extends KeyAdapter {
public void KeyPressed (KeyEvent e){
if (e.getKeyCode()==KeyEvent.VK_ESCAPE){
System.out.println("KeyEvent: " + e.getKeyCode());
System.exit(0);
}
if (e.getKeyCode()==KeyEvent.VK_P){
System.out.println("KeyEvent: " + e.getKeyCode());
rungame = !(rungame);
}
}
public void KeyTyped (KeyEvent e){
if (e.getKeyCode()==KeyEvent.VK_ESCAPE){
System.out.println("KeyEvent: " + e.getKeyCode());
System.exit(0);
}
if (e.getKeyCode()==KeyEvent.VK_P){
System.out.println("KeyEvent: " + e.getKeyCode());
rungame = !(rungame);
}
}
}
[/code]

Auch wenn ich in Zeile 166 alle potenziellen KeyEvents auf die Konsole schreiben lasse, wird nichts ausgegeben. ???:L

Danke für eure Hilfe
Viele Grüße
earlgrey_tea
 

Marco13

Top Contributor
Oh Mann. Jetzt hab' ich auch ne halbe Stunde gebraucht, um zu merken, dass es an den beiden "K"s liegt, die "k"s sein müßten.
 

Antoras

Top Contributor
Und was lehrt uns das? Wenn der Code ausführbar zu sein scheint, ihn am besten gleich in die IDE einfügen. Will sagen: Mit Annotations wäre das nicht passiert:
Java:
@Override
public void keyPressed(KeyEvent e) {}
 

earlgrey_tea

Aktives Mitglied
Super, danke!

Ich glaub das wär mir erst nach dem hundersten Lesedurchgang aufgefallen, dass ich statt:
Code:
public void KeyPressed (KeyEvent e){
besser:
Code:
public void keyPressed (KeyEvent e){
schreiben sollte ;)

Außerdem hab ich jetzt endlich verstanden wozu Annotation wirklich gut sind. NetBeans hat nach dem Eintragen der @Override Anweisung sofort angefangen zu meckern.

Vielen Dank.
earlgrey_tea
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P JTextfield Text durch Keylistener verändern AWT, Swing, JavaFX & SWT 4
N Keylistener & JComboBox AWT, Swing, JavaFX & SWT 5
B Swing JButton mit KeyListener AWT, Swing, JavaFX & SWT 3
H KeyListener funktioniert nicht AWT, Swing, JavaFX & SWT 1
Fridolin111 Der KeyListener Löst kein event aus AWT, Swing, JavaFX & SWT 6
B KeyListener auf JFrame reagiert nicht AWT, Swing, JavaFX & SWT 8
N Mit KeyListener ein rechteck zeichnen AWT, Swing, JavaFX & SWT 9
S Swing JPanel nimmt keinen KeyListener an AWT, Swing, JavaFX & SWT 7
P JPanel KeyListener hinzufügen AWT, Swing, JavaFX & SWT 8
B Swing KeyListener auf Container? AWT, Swing, JavaFX & SWT 1
T Event Handling KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 10
K KeyListener ohne JFrame AWT, Swing, JavaFX & SWT 9
C Keylistener funktioniert nicht AWT, Swing, JavaFX & SWT 1
T KeyListener funktioniert nicht wenn ich ein JButton hinzufüge AWT, Swing, JavaFX & SWT 1
A Event Handling Muss ich 'KeyListener' tasuend mal zufügen? AWT, Swing, JavaFX & SWT 7
S mit keylistener frame schliessen AWT, Swing, JavaFX & SWT 8
S Keylistener reagiert bei Buttons nicht. AWT, Swing, JavaFX & SWT 8
S KeyListener funktioniert nicht AWT, Swing, JavaFX & SWT 2
R KeyListener in mehreren Panels AWT, Swing, JavaFX & SWT 5
V Tastatur KeyListener für mehrere Buttons AWT, Swing, JavaFX & SWT 1
J JLabel Visible setzen in KeyListener AWT, Swing, JavaFX & SWT 13
X KeyListener AWT, Swing, JavaFX & SWT 0
L KeyListener für JDialog AWT, Swing, JavaFX & SWT 7
N KeyListener funktioniert nicht richitg AWT, Swing, JavaFX & SWT 4
Z SnakeGame Schlange per KeyListener bewegen! AWT, Swing, JavaFX & SWT 10
T KeyListener AWT, Swing, JavaFX & SWT 2
GianaSisters JFrame mit JInternalFrames, Keylistener-Problem AWT, Swing, JavaFX & SWT 9
7 KeyListener tastatur temporär blockieren AWT, Swing, JavaFX & SWT 7
7 AWT problem: KeyListener/ test im Label umändern AWT, Swing, JavaFX & SWT 4
B SWT Problem: Wie kann man für jede TableColumn einen eigenen KeyListener registrieren. AWT, Swing, JavaFX & SWT 1
U Mouse + Keylistener AWT, Swing, JavaFX & SWT 12
K ActionListener mit KeyListener AWT, Swing, JavaFX & SWT 7
J JWindow und keylistener AWT, Swing, JavaFX & SWT 1
F JavaFX KeyListener zum Fenster öffnen/schließen AWT, Swing, JavaFX & SWT 9
A Swing KeyEvent mit KeyListener und KeyAdapter kürzer schreiben AWT, Swing, JavaFX & SWT 7
D JTextArea auf KeyListener Command AWT, Swing, JavaFX & SWT 6
C KeyListener AWT, Swing, JavaFX & SWT 5
Doopy Event Handling KeyListener funktioniert nach Restart nicht mehr AWT, Swing, JavaFX & SWT 7
S KeyListener geht nicht AWT, Swing, JavaFX & SWT 12
C Swing KeyListener in JPanel AWT, Swing, JavaFX & SWT 2
A KeyListener Button wechseln & Programm beenden AWT, Swing, JavaFX & SWT 4
M Frage zu KeyListener bzgl. JApplet AWT, Swing, JavaFX & SWT 3
H Bild mit KeyListener verschieben AWT, Swing, JavaFX & SWT 2
C JTextField KeyListener AWT, Swing, JavaFX & SWT 6
Y KeyListener, GUI Thread, repaint AWT, Swing, JavaFX & SWT 7
bluerob Fehler bei Wertübermittlung über KeyListener AWT, Swing, JavaFX & SWT 3
E Swing KeyListener implementieren AWT, Swing, JavaFX & SWT 12
P KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 11
M KeyListener richtig implementieren AWT, Swing, JavaFX & SWT 3
T KeyListener AWT, Swing, JavaFX & SWT 4
R KeyListener in JWindow AWT, Swing, JavaFX & SWT 7
T BlueJ KeyListener AWT, Swing, JavaFX & SWT 7
Z KeyListener AWT, Swing, JavaFX & SWT 2
M Swing KeyListener in JTextfield AWT, Swing, JavaFX & SWT 4
C Swing KeyListener für JPanel funktioniert nicht AWT, Swing, JavaFX & SWT 8
VfL_Freak Swing KeyListener, um einen Dialog per ESC zu schließen AWT, Swing, JavaFX & SWT 6
A Keylistener reagiert nicht AWT, Swing, JavaFX & SWT 10
D Problem mit KeyListener AWT, Swing, JavaFX & SWT 2
J KeyListener um auf CTRL-Enter zu reagieren AWT, Swing, JavaFX & SWT 2
L Snake in Java KeyListener Problem AWT, Swing, JavaFX & SWT 30
B "globaler" KeyListener? AWT, Swing, JavaFX & SWT 3
B JTable TableHeader KeyListener AWT, Swing, JavaFX & SWT 4
S Swing KeyListener und JList AWT, Swing, JavaFX & SWT 2
R KeyListener funzt nicht AWT, Swing, JavaFX & SWT 2
X KeyListener AWT, Swing, JavaFX & SWT 4
P KeyListener + Animation AWT, Swing, JavaFX & SWT 2
M Fokus für KeyListener AWT, Swing, JavaFX & SWT 9
V Problem mit KeyListener im Fullscreen-Modus AWT, Swing, JavaFX & SWT 2
M AWT KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 10
C Swing KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 7
K JFrame + KeyListener + Runnable = Fehler AWT, Swing, JavaFX & SWT 3
F Tastenabfrage (KeyListener) AWT, Swing, JavaFX & SWT 2
D KeyListener Problem bei JPanel wechsel AWT, Swing, JavaFX & SWT 2
S Swing JTree mit KeyListener AWT, Swing, JavaFX & SWT 2
L AWT KeyListener, requestFocus und KeyBindings AWT, Swing, JavaFX & SWT 8
E JFrame akzeptiert den KeyListener nicht AWT, Swing, JavaFX & SWT 3
F Swing Problem mit KeyListener||paintComponent() in JFrame AWT, Swing, JavaFX & SWT 12
P Swing KeyListener hört nur manchmal zu AWT, Swing, JavaFX & SWT 2
Screen Focus Problem , KeyListener, TextField , Key AWT, Swing, JavaFX & SWT 4
L Problem mit KeyListener AWT, Swing, JavaFX & SWT 3
A KeyListener funktioniert nicht AWT, Swing, JavaFX & SWT 4
D KeyListener-Problem nach dem "Gedrückthalten" einer Taste AWT, Swing, JavaFX & SWT 10
B Swing Keylistener fuer Dialog-Buttons AWT, Swing, JavaFX & SWT 2
B KeyListener Strg+s AWT, Swing, JavaFX & SWT 5
D Globaler Keylistener AWT, Swing, JavaFX & SWT 4
M problem mit keylistener/textarea AWT, Swing, JavaFX & SWT 6
M KeyListener Problem unter Firefox AWT, Swing, JavaFX & SWT 2
L AWT KeyListener, Taste gedrückt halten AWT, Swing, JavaFX & SWT 12
M Komisches Verhalten: JCombobox mit KeyListener AWT, Swing, JavaFX & SWT 13
capgeti SWT KeyListener 2 Tasten Problem AWT, Swing, JavaFX & SWT 3
R KeyListener - welcher Komponente hinzufügen AWT, Swing, JavaFX & SWT 5
Developer_X AWT KeyListener wird nicht ausgeführt! AWT, Swing, JavaFX & SWT 3
N JFrame und KeyListener AWT, Swing, JavaFX & SWT 6
M KeyListener reagiert nach Buttondruck nicht mehr AWT, Swing, JavaFX & SWT 4
A AWT Button verhindert ausführung vom Keylistener AWT, Swing, JavaFX & SWT 4
R KeyListener hinzufügen AWT, Swing, JavaFX & SWT 7
T Swing KeyListener mit mehreren Objekten AWT, Swing, JavaFX & SWT 2
G KeyListener AWT, Swing, JavaFX & SWT 3
E KeyListener AWT, Swing, JavaFX & SWT 5
L Focus für KeyListener auf verschiedene Panels AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben