Keylistener funktioniert nicht

Dieses Thema Keylistener funktioniert nicht im Forum "AWT, Swing, JavaFX & SWT" wurde erstellt von chrysi_m, 11. Jan. 2017.

Thema: Keylistener funktioniert nicht Hi, ich habe ein altes Pacman-Javaprogramm hervorgeholt, früher hat es funktioniert. Jetzt gehts nicht mehr. Die...

  1. Hi, ich habe ein altes Pacman-Javaprogramm hervorgeholt, früher hat es funktioniert. Jetzt gehts nicht mehr. Die Tastatureingaben über den Keylistener funktioniert nicht mehr.
    Wenn ich JApplet durch Applet ersetze, dann geht es, aber das Bild flimmert.
    Wie muss ich den Code anpassen, damit es mit JApplet klappt?
    Übrigens wenn ich einen Mouselistener benutze, funktionieren die Mauseingaben auch im JApplet, aber eben nicht die Tastatureingaben. Ich glaube, das JApplet verliert irgendwie den Focus. Hier ist der Code der Hauptklasse. Danke für mögliche Antworten:
    Code (Java):
    import java.applet.*;
    import java.awt.*;
    import javax.swing.*;
    import java.io.*;
    import java.awt.Graphics;
    import java.awt.Event;
    import java.awt.Font;
    import java.awt.Color;
    import java.awt.event.*;

    public class Pacman extends JApplet implements KeyListener{
        Punkte punkte = new Punkte();
        Spieler spieler = new Spieler();
        Gegner gegner = new Gegner();
        int Zeit = 200;
        int breite = 40;
        int RichtungNeu = 0;
        Level level = new Level();
        Image bild;
        AudioClip Space;
     
        public void init() { // Spielstart
            addKeyListener(this);
            try {level.levellesen("Level 1.txt", punkte, gegner);}
            catch(IOException e){System.out.println("Es ist ein Fehler beim lesen aufgetreten\n" + e);}
            MediaTracker mt = new MediaTracker(this);
            this.setSize(java.awt.Toolkit.getDefaultToolkit().getScreenSize());
     
     
        }
     
        public void SoundAbspielen(String SoundDatei) { // Spielklänge
            Space = getAudioClip(getCodeBase(), SoundDatei);
            Space.play(); }
     
        public void keyReleased(KeyEvent e) { // Tastatureingabe
            spieler.setzeRichtungMerken(spieler.gibRichtung());
            if(level.gibLevelBeendet() == 1) level.setzeLevelBeendet(0);
            if (e.getKeyCode() == 'a') RichtungNeu = 3;
            if (e.getKeyCode() == KeyEvent.VK_LEFT) RichtungNeu = 1;
            if (e.getKeyCode() == KeyEvent.VK_UP) RichtungNeu = 2;
            if (e.getKeyCode() == KeyEvent.VK_DOWN) RichtungNeu = 4; }
     
        public void paint(Graphics g) { // Spielschleife und Grafische Darstellung
          int xpaint, ypaint;
     
          // Spielschleife
          if(RichtungNeu == 4 && level.gibFeld(level.gibX(), level.gibY()+1) != 2) {spieler.setzeRichtung(4); RichtungNeu = 0;}
          if(RichtungNeu == 3 && level.gibFeld(level.gibX()+1, level.gibY()) != 2) {spieler.setzeRichtung(3); RichtungNeu = 0;}
          if(RichtungNeu == 2 && level.gibFeld(level.gibX(), level.gibY()-1) != 2) {spieler.setzeRichtung(2); RichtungNeu = 0;}
          if(RichtungNeu == 1 && level.gibFeld(level.gibX()-1, level.gibY()) != 2) {spieler.setzeRichtung(1); RichtungNeu = 0;}
     
          if(spieler.gibRichtung() == 5) spieler.PacmanBewegung(0, level, spieler, punkte, gegner);
          if(spieler.gibRichtung() == 1) spieler.PacmanBewegung(1, level, spieler, punkte, gegner);
          if(spieler.gibRichtung() == 2) spieler.PacmanBewegung(2, level, spieler, punkte, gegner);
          if(spieler.gibRichtung() == 3) spieler.PacmanBewegung(3, level, spieler, punkte, gegner);
          if(spieler.gibRichtung() == 4) spieler.PacmanBewegung(4, level, spieler, punkte, gegner);

          gegner.GegnerBewegung(1, level, spieler, punkte, gegner);
          gegner.GegnerBewegung(2, level, spieler, punkte, gegner);
          gegner.GegnerBewegung(3, level, spieler, punkte, gegner);
          gegner.GegnerBewegung(4, level, spieler, punkte, gegner);
     
          // Grafische Darstellung
          xpaint = 0;
          ypaint = 0;
     
         for(int t = 1; t<=2; t++) {
            xpaint = 0;
            ypaint = 0;
     
           for(int n = 0; n<=level.gibZeichenAnzahl()-1; n++) {
              for(int k = 0; k<=level.gibZeichenAnzahl()-1; k++) {
                  if(level.gibFeld(k, n)==1) {if(t==1) bild = getImage(getCodeBase(),"./stern1.jpg"); if(t==2) bild = getImage(getCodeBase(),"./stern2.jpg");}
                  if(level.gibFeld(k, n)==2) bild = getImage(getCodeBase(),"./mauer.jpg");
                  if(level.gibFeld(k, n)==3) bild = getImage(getCodeBase(),"./leer.jpg");
                  if(level.gibFeld(k, n)==4) bild = getImage(getCodeBase(),"./pacman2.jpg");
                  if(level.gibFeld(k, n)==5) bild = getImage(getCodeBase(),"./gegner.jpg");
                  g.drawImage(bild, xpaint, ypaint, breite, breite, this);
                  xpaint = xpaint + breite;
                  }
              ypaint = ypaint + breite;
              xpaint = 0;
            }
       
            // Animation von Pacman
            if(t==1 && spieler.gibRichtung() == 1) {
                bild = getImage(getCodeBase(),"./leer.jpg");
                g.drawImage(bild, level.gibX()*breite, level.gibY()*breite, breite, breite, this);
                g.drawImage(bild, (level.gibX()+1)*breite, level.gibY()*breite, breite, breite, this);
                bild = getImage(getCodeBase(),"./pacman1.jpg");
                g.drawImage(bild, (int) ((level.gibX()+0.5)*breite), level.gibY()*breite, breite, breite, this); }
                       
            if(t==1 && spieler.gibRichtung() == 2) {
                bild = getImage(getCodeBase(),"./leer.jpg");
                g.drawImage(bild, level.gibX()*breite, level.gibY()*breite, breite, breite, this);
                g.drawImage(bild, level.gibX()*breite, (level.gibY()+1)*breite, breite, breite, this);
                bild = getImage(getCodeBase(),"./pacman1.jpg");
                g.drawImage(bild, level.gibX()*breite, (int) ((level.gibY()+0.5)*breite), breite, breite, this); }
       
            if(t==1 && spieler.gibRichtung() == 3) {
                bild = getImage(getCodeBase(),"./leer.jpg");
                g.drawImage(bild, level.gibX()*breite, level.gibY()*breite, breite, breite, this);
                g.drawImage(bild, (level.gibX()-1)*breite, level.gibY()*breite, breite, breite, this);
                bild = getImage(getCodeBase(),"./pacman1.jpg");
                g.drawImage(bild, (int) ((level.gibX()-0.5)*breite), level.gibY()*breite, breite, breite, this); }
       
            if(t==1 && spieler.gibRichtung() == 4) {
                bild = getImage(getCodeBase(),"./leer.jpg");
                g.drawImage(bild, level.gibX()*breite, level.gibY()*breite, breite, breite, this);
                g.drawImage(bild, level.gibX()*breite, (level.gibY()-1)*breite, breite, breite, this);
                bild = getImage(getCodeBase(),"./pacman1.jpg");
                g.drawImage(bild, level.gibX()*breite, (int) ((level.gibY()-0.5)*breite), breite, breite, this); }
       
            repaint();
            try { Thread.sleep( (int)(0.5*Zeit));}
            catch (InterruptedException e) {} }
       
            g.setColor(Color.YELLOW);
            g.fillRect(0, ypaint, breite * level.gibZeichenAnzahl(), 100);
            g.setColor(Color.BLACK);
            g.drawString("Punkte = " + punkte.gibPunkte(), 0, ypaint + 20);
            g.drawString("Versuche = " + level.gibVersuche(), 0, ypaint + 2*20);
            if(level.gibLevelBeendet() == 1) g.drawString("Sie haben das Level beendet!", 0, ypaint + 3*20);
        }

        public void keyPressed(KeyEvent e) {}
        public void keyTyped(KeyEvent e) {}

    }
     
  2. Vielleicht hilft dir das Java-Tutorial weiter. Hier klicken --> (Klick)
  3. Könntest du die anderen Klassen auch noch einfügen?
    Dann guck ich mal was ich machen kann :D