KeyListener funktioniert nicht? Weshalb?

Zitrus

Bekanntes Mitglied
Hallo mal wieder,
Ich denke die Frage ist geklärt. Ich komme mit Listenern einfach nicht zurecht :D
Was ist daran falsch?
Java:
import java.awt.Graphics;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JLabel;
import javax.swing.JButton;
import java.awt.Image;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import java.util.Random;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Font;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class MyPanel extends JPanel implements ActionListener,KeyListener
{
    JTextArea t1;
    JTextArea t2;
    JLabel l3;
    JButton wuerfel;

    Image Ispielbrett;    
    Image Irot;
    Image Iblau;

    Hintergrund spielbrett;

    Figur figur1;
    Figur figur2;
    Figur figur3;
    Figur figur4;
    Figur aktuelleFigur1;
    Figur aktuelleFigur2;

    String aktuelleFarbe;

    public MyPanel()
    {
        setLayout(null);
        setSize(590,710);

        aktuelleFarbe = StartwertFuerSpieler();

        loadImages();

        spielbrett = new Hintergrund(Ispielbrett,0,0);

        wuerfel = new JButton("Wuerfel");
        wuerfel.setBounds(0,585,100,100);
        wuerfel.addActionListener(this);

        t1 = new JTextArea();
        t1.setBounds(485,585,100,100);
        t1.setFont(new Font("Verdana", 0, 72));
        t1.setEditable(false);

        t2 = new JTextArea();
        t2.setBounds(300,585,100,100);
        t2.setFont(new Font("Verdana", 0, 72));
        t2.setEditable(false);

        l3 = new JLabel();
        l3.setBounds(110 ,585,200,100);
        l3.setFont(new Font("Verdana", 0, 20));
        l3.setText("Aktuelle Figuren:");

        figur1 = new Figur(Irot,155,155); // Ein Feld ist 57!
        figur2 = new Figur(Iblau,383,155); // Home-Feld ist auf: 269/269
        figur3 = new Figur(Irot,155,383);
        figur4 = new Figur(Iblau,383,383);

        figur1.addKeyListener(this);
        figur2.addKeyListener(this);
        figur3.addKeyListener(this);
        figur4.addKeyListener(this);

        add(t1);
        add(t2);
        add(l3);
        add(wuerfel);
    }

    @Override
    public void paintComponent(Graphics g)
    {
        spielbrett.paintComponent(g);
        figur1.paintComponent(g);
        figur2.paintComponent(g);
        figur3.paintComponent(g);
        figur4.paintComponent(g);
    }

    public void loadImages() {
        try {
            Iblau = ImageIO.read(new File("figurblau.png"));
            Irot = ImageIO.read(new File("figurrot.png"));
            Ispielbrett = ImageIO.read(new File("spielbrett.png"));
        } catch(IOException ex) {
            System.out.println("Fehler: " + ex.toString());
        }
    }

    public void druckeGewinner() {
        if(figur1.gewonnen() == true) {
            System.out.println("Rot hat gewonnen");
        }

        if(figur2.gewonnen() == true) {
            System.out.println("Blau hat gewonnen");
        }

        if(figur3.gewonnen() == true) {
            System.out.println("Rot hat gewonnen");
        }

        if(figur4.gewonnen() == true) {
            System.out.println("Blau hat gewonnen");
        }
    }

    public void kriegeAktuellenSpieler() {
        Random r = new Random();
        int zufall1 = r.nextInt(4) + 1;
        int zufall2 = r.nextInt(4) + 1;

        if(zufall1 == 1) {
            t1.setText(" 1");
            aktuelleFigur1 = figur1;
            aktuelleFigur1.addKeyListener(this);
        }
        else if(zufall1 == 2) {
            t1.setText(" 2");
            aktuelleFigur1 = figur2;
        }
        else if(zufall1 == 3) {
            t1.setText(" 3");
            aktuelleFigur1 = figur3;
        }
        else if(zufall1 == 4) {
            t1.setText(" 4");
            aktuelleFigur1 = figur4;
        }

        if(zufall2 == 1) {
            t2.setText(" 1");
            aktuelleFigur2 = figur1;
        }
        else if(zufall2 == 2) {
            t2.setText(" 2");
            aktuelleFigur2 = figur2;
        }
        else if(zufall2 == 3) {
            t2.setText(" 3");
            aktuelleFigur2 = figur3;
        }
        else if(zufall2 == 4) {
            t2.setText(" 4");
            aktuelleFigur2 = figur4;
        }
    }

    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == wuerfel) {
            kriegeAktuellenSpieler();
        }
    }

    public void keyReleased(KeyEvent e) {

    }

    public void keyPressed(KeyEvent e) {
        if(aktuelleFigur1 != null && aktuelleFigur2 != null) {
            if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
                aktuelleFigur1.x += 57;
                aktuelleFigur1.repaint();
                aktuelleFigur2.x += 57;
                aktuelleFigur2.repaint();
            }
            else if(e.getKeyCode() == KeyEvent.VK_LEFT) {
                aktuelleFigur1.x -= 57;
                aktuelleFigur2.x -= 57;
            }
            else if(e.getKeyCode() == KeyEvent.VK_UP) {
                aktuelleFigur1.y -= 57;
                aktuelleFigur2.y -= 57;
            }
            else if(e.getKeyCode() == KeyEvent.VK_DOWN) {
                aktuelleFigur1.y += 57;
                aktuelleFigur1.y += 57;
            }
        }
    }

    public void keyTyped(KeyEvent e) {
    }

    String StartwertFuerSpieler() {
        Random r = new Random();
        int zufall = r.nextInt(2) + 1;
        String farbe = "";

        if (zufall == 1) {
            farbe = "Rot";
        }
        else if(zufall == 2) {
            farbe = "Blau";
        }
        return farbe;
    }

    void setzeNeuenSpieler() {
        if(aktuelleFarbe.equalsIgnoreCase("Rot")) {
            aktuelleFarbe = "Blau";
        }
        else if(aktuelleFarbe.equalsIgnoreCase("Blau")) {
            aktuelleFarbe = "Rot";
        }
    }
}

Klasse Figur:
Java:
import javax.swing.JComponent;
import java.awt.Image;
import java.awt.Graphics;

public class Figur extends JComponent
{
    int x;
    int y;
    Image image;

    public Figur(Image i, int startX, int startY)
    {
        this.image = i;
        this.x = startX;
        this.y = startY;
        requestFocus();
        setFocusable(true);
    }
    
    public void paintComponent(Graphics g) {
        g.drawImage(image,x,y,this );
    }
    
    boolean gewonnen() {
        if(x == 155 && y == 155) {
            return true;
        }
        else {
            return false;
        }
    }
}
 
Zuletzt bearbeitet:

Java20134

Bekanntes Mitglied
Setze den KeyListener mal nur auf das JFrame, welches dann dein JPanel beinhaltet. Schreibe also in der Klasse MyPanel folgendes:
Java:
frame.addKeyListener(this);
Dazu musst du als Parameter im Konstruktor noch das JFrame übergeben.
 

Zitrus

Bekanntes Mitglied
Erstmal vielen Dank für deine Antwort. Aber ich habe ne Extra Klasse für das Fenster erstellt gehabt:
Java:
import javax.swing.JFrame;
import java.awt.Dimension;
import javax.swing.UIManager;
import javax.swing.SwingUtilities;

public class Fenster extends JFrame
{    
    MyPanel panel;

    public Fenster()
    {   
        super("GoHome");

        setResizable(false);
        setSize(590,710);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        MyPanel panel = new MyPanel();

        add(panel);

        setVisible(true);
    }
}

Also soll ich deiner Meinung nach den KeyListener in der Klasse Fenster implementieren?
Ich möchte ja aber die Figuren bewegen, was bringt es mir dann den KeyListener auf das Fenster zu legen?
 
Zuletzt bearbeitet:

Harry Kane

Top Contributor
@Java20134: Und woher soll das Programm dann wissen, welche Figur beim Drücken einer Taste bewegt werden soll?
@Zitrus: Die kriegeAktuellenSpieler-Methode sieht ... sagen wir mal "komisch" aus. Das "umbiegen" der Pointer aktuelleFigur1 und 2 auf eine der Figuren figur1 bis figur4 ist klar. Das muss so sein.
Was ich aber nicht verstehe: falls zufall ==1 ist, bekommt aktuelleFigur1 die MyPanel-Instanz als KeyListener verpasst, obwohl aktuelleFigur1 nur ein Objekt aus der Gruppe figur1 bis figur4 sein kann, und die Objekte bereits MyPanel als KeyListener haben. Was soll das?
Und damit sich die Figur bewegt, muss sie natürlich einen KeyListener haben (das hast du gemacht), und sie muss natürlich den Focus haben. Den Focus bekommen deine Figur-Objekte aber nur im Konstruktor! Nachdem alle Figuren instanziiert sind, müsste figur4 den Focus haben. beim Drücken auf den JButton müsste dieser den Focus erhalten.
Versuche mal, in deiner kriegeAktuellenSpieler der aktuellenFigur, nachdem du sie aus figur1 bis figur4 ausgewählt hast, den focus zu verpassen. Dann müsstest du zumindest eine Figur bewegen können. Allerdings sieht deine Methode so aus, als sollten sich zwei Figuren bewegen. Das wird so natürlich nicht gehen, weil immer nur eine Figur den Focus haben kann.
Deine if-else-Abfragen finde ich übrigens teilweise unnötig umständlich. Wie wärs mit sowas:
Java:
Figur[] figuren = new Figur[4];
//dann figur1 bis figur4 ins Array packen.
//dann in der kriegeAktuellenSpieler Methode
aktuelleFigur1 = figuren[zufall1 - 1];
aktuelleFigur2 = figuren[zufall2 - 1];
Und statt
Java:
if(figur1.gewonnen() == true)
schreibt man
Java:
if(figur1.gewonnen())
 

Java20134

Bekanntes Mitglied
Nein, schreibe in deine Klasse MyPanel den oben stehenden Code und füge dem Konstruktor von MyPanel den Parameter JFrame f hinzu (public MyPanel(JFrame frame)). Dann musst du noch in der Klasse Fenster das Argument übergeben werden(Zeile 19: ... new MyPanel(this)).
 

Zitrus

Bekanntes Mitglied
Irgendwie klappen beide Vorschläge nicht und es bewegt sich nichtmal eine Figur. Habt ihr noch andere Vorschläge für mich?

@HarryKane
Wenn ich dich richtig verstanden habe sollte beim schreiben von:

Java:
public void kriegeAktuellenSpieler() {
        Random r = new Random();
        int zufall1 = r.nextInt(4) + 1;
        int zufall2 = r.nextInt(4) + 1;

        if(zufall1 == 1) {
            t1.setText(" 1");
            aktuelleFigur1 = figur1;
            aktuelleFigur1.setFocusable(true);
            aktuelleFigur1.requestFocus();
        }
        else if(zufall1 == 2) {
            t1.setText(" 2");
            aktuelleFigur1 = figur2;
            aktuelleFigur1.setFocusable(true);
            aktuelleFigur1.requestFocus();
        }
        else if(zufall1 == 3) {
            t1.setText(" 3");
            aktuelleFigur1 = figur3;
            aktuelleFigur1.setFocusable(true);
            aktuelleFigur1.requestFocus();
        }
        else if(zufall1 == 4) {
            t1.setText(" 4");
            aktuelleFigur1 = figur4;
            aktuelleFigur1.setFocusable(true);
            aktuelleFigur1.requestFocus();
        }

        if(zufall2 == 1) {
            t2.setText(" 1");
            aktuelleFigur2 = figur1;
        }
        else if(zufall2 == 2) {
            t2.setText(" 2");
            aktuelleFigur2 = figur2;
        }
        else if(zufall2 == 3) {
            t2.setText(" 3");
            aktuelleFigur2 = figur3;
        }
        else if(zufall2 == 4) {
            t2.setText(" 4");
            aktuelleFigur2 = figur4;
        }
    }

die aktuelleFigur1 bewegt werden. Sie macht aber nichts... Wieso?

PS: Das mit dem KeyListener quatsch war hatte ich davor auch schon bemerkt :)
 
Zuletzt bearbeitet:

Zitrus

Bekanntes Mitglied
@HarryKane sollte es so nicht funktionieren? Ich gebe der aktuellenFigur1 ja den Focus bewege die Figur und anschließend gebe ich den Focus dann der aktuellenFigur2
Java:
import java.awt.Graphics;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JFrame;
import java.awt.Image;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import java.util.Random;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Font;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class Spiel extends JFrame
{    
    MyPanel panel;

    public Spiel()
    {   
        super("Go Home");

        setResizable(false);
        setSize(590,710);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        MyPanel panel = new MyPanel();

        add(panel);

        setVisible(true);
    }

    class MyPanel extends JPanel implements KeyListener,ActionListener
    {
        JTextArea t1;
        JTextArea t2;
        JLabel l3;
        JButton wuerfel;

        Image Ispielbrett;    
        Image Irot;
        Image Iblau;

        Hintergrund spielbrett;

        Figur figur1;
        Figur figur2;
        Figur figur3;
        Figur figur4;
        Figur aktuelleFigur1;
        Figur aktuelleFigur2;

        public MyPanel()
        {
            setLayout(null);
            setSize(590,710);

            loadImages();

            spielbrett = new Hintergrund(Ispielbrett,0,0);

            wuerfel = new JButton("Wuerfel");
            wuerfel.setBounds(0,585,100,100);
            wuerfel.addActionListener(this);

            t1 = new JTextArea();
            t1.setBounds(485,585,100,100);
            t1.setFont(new Font("Verdana", 0, 72));
            t1.setEditable(false);

            t2 = new JTextArea();
            t2.setBounds(300,585,100,100);
            t2.setFont(new Font("Verdana", 0, 72));
            t2.setEditable(false);

            l3 = new JLabel();
            l3.setBounds(110 ,585,200,100);
            l3.setFont(new Font("Verdana", 0, 20));
            l3.setText("Aktuelle Figuren:");

            figur1 = new Figur(Irot,155,155); // Ein Feld ist 57!
            figur2 = new Figur(Iblau,383,155); // Home-Feld ist auf: 269/269
            figur3 = new Figur(Irot,155,383);
            figur4 = new Figur(Iblau,383,383);

            figur1.addKeyListener(this);
            figur2.addKeyListener(this);
            figur3.addKeyListener(this);
            figur4.addKeyListener(this);

            add(t1);
            add(t2);
            add(l3);
            add(wuerfel);
        }

        @Override
        public void paintComponent(Graphics g)
        {
            spielbrett.paintComponent(g);
            figur1.paintComponent(g);
            figur2.paintComponent(g);
            figur3.paintComponent(g);
            figur4.paintComponent(g);
        }

        public void loadImages() {
            try {
                Iblau = ImageIO.read(new File("figurblau.png"));
                Irot = ImageIO.read(new File("figurrot.png"));
                Ispielbrett = ImageIO.read(new File("spielbrett.png"));
            } catch(IOException ex) {
                System.out.println("Fehler: " + ex.toString());
            }
        }

        public void druckeGewinner() {
            if(figur1.gewonnen() == true) {
                System.out.println("Rot hat gewonnen");
            }

            if(figur2.gewonnen() == true) {
                System.out.println("Blau hat gewonnen");
            }

            if(figur3.gewonnen() == true) {
                System.out.println("Rot hat gewonnen");
            }

            if(figur4.gewonnen() == true) {
                System.out.println("Blau hat gewonnen");
            }
        }

        public void kriegeAktuellenSpieler() {
            Random r = new Random();
            int zufall1 = r.nextInt(4) + 1;
            int zufall2 = r.nextInt(4) + 1;

            if(zufall1 == 1) {
                t1.setText(" 1");
                aktuelleFigur1 = figur1;
            }
            else if(zufall1 == 2) {
                t1.setText(" 2");
                aktuelleFigur1 = figur2;
            }
            else if(zufall1 == 3) {
                t1.setText(" 3");
                aktuelleFigur1 = figur3;
            }
            else if(zufall1 == 4) {
                t1.setText(" 4");
                aktuelleFigur1 = figur4;
            }

            if(zufall2 == 1) {
                t2.setText(" 1");
                aktuelleFigur2 = figur1;
            }
            else if(zufall2 == 2) {
                t2.setText(" 2");
                aktuelleFigur2 = figur2;
            }
            else if(zufall2 == 3) {
                t2.setText(" 3");
                aktuelleFigur2 = figur3;
            }
            else if(zufall2 == 4) {
                t2.setText(" 4");
                aktuelleFigur2 = figur4;
            }
        }

        public void actionPerformed(ActionEvent e) {
            if(e.getSource() == wuerfel) {
                kriegeAktuellenSpieler();
            }
        }

        public void keyReleased(KeyEvent e) {

        }

        public void keyPressed(KeyEvent e) {
            if(aktuelleFigur1 != null && aktuelleFigur2 != null) {
                if(e.getKeyCode() == KeyEvent.VK_D) {
                    aktuelleFigur1.requestFocus();
                    aktuelleFigur1.x += 57;
                    aktuelleFigur1.repaint();
                    aktuelleFigur2.requestFocus();
                    aktuelleFigur2.x += 57;
                    aktuelleFigur2.repaint();
                }
                else if(e.getKeyCode() == KeyEvent.VK_A) {
                    aktuelleFigur1.requestFocus();
                    aktuelleFigur1.x -= 57;
                    aktuelleFigur1.repaint();
                    aktuelleFigur2.requestFocus();
                    aktuelleFigur2.x -= 57;
                    aktuelleFigur2.repaint();
                }
                else if(e.getKeyCode() == KeyEvent.VK_W) {
                    aktuelleFigur1.requestFocus();
                    aktuelleFigur1.y -= 57;
                    aktuelleFigur1.repaint();
                    aktuelleFigur2.requestFocus();
                    aktuelleFigur2.y -= 57;
                    aktuelleFigur2.repaint();
                }
                else if(e.getKeyCode() == KeyEvent.VK_S) {
                    aktuelleFigur1.requestFocus();
                    aktuelleFigur1.y += 57;
                    aktuelleFigur1.repaint();
                    aktuelleFigur2.requestFocus();
                    aktuelleFigur2.y += 57;
                    aktuelleFigur2.repaint();
                }
            }
        }

        public void keyTyped(KeyEvent e) {
        }
    }
}

Ausserdem habe ich die Figur-Klasse so modifiziert, dass der Focus nicht mehr im Konstruktor übergeben wird.

Java:
mport javax.swing.JComponent;
import java.awt.Image;
import java.awt.Graphics;

public class Figur extends JComponent
{
    int x;
    int y;
    Image image;

    public Figur(Image i, int startX, int startY)
    {
        this.image = i;
        this.x = startX;
        this.y = startY;
        setFocusable(true);
    }
    
    public void paintComponent(Graphics g) {
        g.drawImage(image,x,y,this );
    }
    
    boolean gewonnen() {
        if(x == 155 && y == 155) {
            return true;
        }
        else {
            return false;
        }
    }
}

Du hast wahrscheinlich bemerkt, dass ich die Fenster Klasse und die MyPanel Klasse zusammengefasst habe. Sollte Okay sein oder?
 

Harry Kane

Top Contributor
ich habe mir gerade aus deinen Fragmenten ein lauffähiges Programm gebastelt und damit rumgespielt.
Folgendes hat zu Erfolg geführt:
- MyPanel wird nicht auf den Figuren als keyListener registriert, sondern auf sich selber:
Java:
this.addKeyListener(this);
- MyPanel wird auch auf focusable gesetzt
Java:
this.setFocusable(true);
- Am Ende der kriegeAktuellenSpieler Methode fordert MyPanel den Focus an:
Java:
this.requestFocusInWindow();
Damit der Hintergrund vor dem Neuzeichnen der Figuren gelöscht wird, steht als erster Aurfruf in der paintComponent-Methode von MyPanel
Java:
super.paintComponent(g);
Kannst ja mal versuchen, ob es bei dir dann auch funktioniert.
 

Zitrus

Bekanntes Mitglied
[EDIT]
JUHUU ES KLAPPT!
Was gefehlt hat war der repaint des Panels :)
[/EDIT]
Noch eine letzte Frage: Wieso muss man den KeyListener dem Panel übergeben und nicht den Figuren an sich?

Java:
import java.awt.Graphics;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JFrame;
import java.awt.Image;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import java.util.Random;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Font;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class Spiel extends JFrame
{    
    MyPanel panel;

    public Spiel()
    {   
        super("Go Home");

        setResizable(false);
        setSize(590,710);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        MyPanel panel = new MyPanel();

        add(panel);

        setVisible(true);
    }

    class MyPanel extends JPanel implements KeyListener,ActionListener
    {
        JTextArea t1;
        JTextArea t2;
        JLabel l3;
        JButton wuerfel;

        Image Ispielbrett;    
        Image Irot;
        Image Iblau;

        Hintergrund spielbrett;

        Figur figur1;
        Figur figur2;
        Figur figur3;
        Figur figur4;
        Figur aktuelleFigur1;
        Figur aktuelleFigur2;

        public MyPanel()
        {
            setLayout(null);
            setSize(590,710);

            loadImages();

            spielbrett = new Hintergrund(Ispielbrett,0,0);

            wuerfel = new JButton("Wuerfel");
            wuerfel.setBounds(0,585,100,100);
            wuerfel.addActionListener(this);

            t1 = new JTextArea();
            t1.setBounds(485,585,100,100);
            t1.setFont(new Font("Verdana", 0, 72));
            t1.setEditable(false);

            t2 = new JTextArea();
            t2.setBounds(300,585,100,100);
            t2.setFont(new Font("Verdana", 0, 72));
            t2.setEditable(false);

            l3 = new JLabel();
            l3.setBounds(110 ,585,200,100);
            l3.setFont(new Font("Verdana", 0, 20));
            l3.setText("Aktuelle Figuren:");

            figur1 = new Figur(Irot,155,155); // Ein Feld ist 57!
            figur2 = new Figur(Iblau,383,155); // Home-Feld ist auf: 269/269
            figur3 = new Figur(Irot,155,383);
            figur4 = new Figur(Iblau,383,383);
            
            this.addKeyListener(this);
            this.setFocusable(true);

            add(t1);
            add(t2);
            add(l3);
            add(wuerfel);
        }

        @Override
        public void paintComponent(Graphics g)
        {
            super.paintComponent(g);
            spielbrett.paintComponent(g);
            figur1.paintComponent(g);
            figur2.paintComponent(g);
            figur3.paintComponent(g);
            figur4.paintComponent(g);
        }

        public void loadImages() {
            try {
                Iblau = ImageIO.read(new File("figurblau.png"));
                Irot = ImageIO.read(new File("figurrot.png"));
                Ispielbrett = ImageIO.read(new File("spielbrett.png"));
            } catch(IOException ex) {
                System.out.println("Fehler: " + ex.toString());
            }
        }

        public void druckeGewinner() {
            if(figur1.gewonnen() == true) {
                System.out.println("Rot hat gewonnen");
            }

            if(figur2.gewonnen() == true) {
                System.out.println("Blau hat gewonnen");
            }

            if(figur3.gewonnen() == true) {
                System.out.println("Rot hat gewonnen");
            }

            if(figur4.gewonnen() == true) {
                System.out.println("Blau hat gewonnen");
            }
        }

        public void kriegeAktuellenSpieler() {
            Random r = new Random();
            int zufall1 = r.nextInt(4) + 1;
            int zufall2 = r.nextInt(4) + 1;

            if(zufall1 == 1) {
                t1.setText(" 1");
                aktuelleFigur1 = figur1;
            }
            else if(zufall1 == 2) {
                t1.setText(" 2");
                aktuelleFigur1 = figur2;
            }
            else if(zufall1 == 3) {
                t1.setText(" 3");
                aktuelleFigur1 = figur3;
            }
            else if(zufall1 == 4) {
                t1.setText(" 4");
                aktuelleFigur1 = figur4;
            }

            if(zufall2 == 1) {
                t2.setText(" 1");
                aktuelleFigur2 = figur1;
            }
            else if(zufall2 == 2) {
                t2.setText(" 2");
                aktuelleFigur2 = figur2;
            }
            else if(zufall2 == 3) {
                t2.setText(" 3");
                aktuelleFigur2 = figur3;
            }
            else if(zufall2 == 4) {
                t2.setText(" 4");
                aktuelleFigur2 = figur4;
            }
            
            this.requestFocusInWindow();
        }

        public void actionPerformed(ActionEvent e) {
            if(e.getSource() == wuerfel) {
                kriegeAktuellenSpieler();
            }
        }

        public void keyReleased(KeyEvent e) {

        }

        public void keyPressed(KeyEvent e) {
            if(aktuelleFigur1 != null && aktuelleFigur2 != null) {
                if(e.getKeyCode() == KeyEvent.VK_D) {
                    aktuelleFigur1.x += 57;
                    aktuelleFigur2.x += 57;
                    this.repaint();
                }
                else if(e.getKeyCode() == KeyEvent.VK_A) {
                    aktuelleFigur1.x -= 57;
                    aktuelleFigur2.x -= 57;
                    this.repaint();
                }
                else if(e.getKeyCode() == KeyEvent.VK_W) {
                    aktuelleFigur1.y -= 57;
                    aktuelleFigur2.y -= 57;
                    this.repaint();
                }
                else if(e.getKeyCode() == KeyEvent.VK_S) {
                    aktuelleFigur1.y += 57;
                    aktuelleFigur2.y += 57;
                    this.repaint();
                }
            }
        }

        public void keyTyped(KeyEvent e) {
        }
    }
}

PS: Noch eine Idee wie man sich pro Zug nur einmal bewegen kann? Damit meine ich, dass man die aktuellenFiguren nur einmal ziehen kann und dann muss neu gewürfelt werden damit man nochmal bewegen kann.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
Gfreak23 Input/Output KeyListener funktioniert auf Laptop nicht allerdings auf Tower-PC Java Basics - Anfänger-Themen 8
K Input/Output KeyListener funktioniert nicht Java Basics - Anfänger-Themen 3
Maxim6394 KeyListener funktioniert nicht Java Basics - Anfänger-Themen 20
J KeyListener (keyTyped) funktioniert nicht Java Basics - Anfänger-Themen 9
Das Brot Nach .add(JRadioButton) funktioniert der KeyListener nicht mehr Java Basics - Anfänger-Themen 2
U ActionListener und KeyListener - KeyListener funktioniert nicht Java Basics - Anfänger-Themen 2
M TabbedPane: KeyListener funktioniert nicht mehr Java Basics - Anfänger-Themen 8
H KeyListener funktioniert nicht Java Basics - Anfänger-Themen 8
A KeyListener funktioniert nicht Java Basics - Anfänger-Themen 7
E Keylistener funktioniert nicht richtig. Java Basics - Anfänger-Themen 17
G Applet mit Keylistener funktioniert nicht Java Basics - Anfänger-Themen 3
D KeyListener funktioniert nicht Java Basics - Anfänger-Themen 10
O KeyListener funktioniert nur wenn er will Java Basics - Anfänger-Themen 2
P Wie kann ich meine Keylistener Klasse unterscheiden lassen, von welcher "Quelle" der Input kommt? Java Basics - Anfänger-Themen 2
B Bild per KeyListener drehen Java Basics - Anfänger-Themen 1
javalux123 Keylistener auf andere Fenster Java Basics - Anfänger-Themen 3
F Problem mit KeyListener in kombination mit dem ActionListener Java Basics - Anfänger-Themen 4
M KeyListener reagiert nicht Java Basics - Anfänger-Themen 4
M Mit KeyListener Farbe von Label ändern Java Basics - Anfänger-Themen 13
N Java Keylistener Java Basics - Anfänger-Themen 2
B KeyListener funkioniert nicht Java Basics - Anfänger-Themen 2
F KeyListener Java Basics - Anfänger-Themen 3
S Erste Schritte 2D Grafik Probleme mit KeyListener. Java Basics - Anfänger-Themen 18
G KeyListener und JButton vertragen sich nicht Java Basics - Anfänger-Themen 1
J-Gallus Keylistener verstehen Java Basics - Anfänger-Themen 17
S Keylistener Java Basics - Anfänger-Themen 16
S Keylistener im Grafikfenster Java Basics - Anfänger-Themen 3
H Mouse- und KeyListener Probleme? Java Basics - Anfänger-Themen 5
N KeyListener in Thread Java Basics - Anfänger-Themen 0
LexeB4F for schliefe in KeyListener Java Basics - Anfänger-Themen 3
R KeyListener auslagern Java Basics - Anfänger-Themen 3
J KeyListener aus anderer Klasse bereitet Probleme Java Basics - Anfänger-Themen 1
T KeyListener Java Basics - Anfänger-Themen 2
J KeyListener - mal wieder... Java Basics - Anfänger-Themen 2
TheSorm KeyListener Problem Java Basics - Anfänger-Themen 4
M KeyListener Java Basics - Anfänger-Themen 3
S KeyListener/ActionListener/paint()/repaint() Java Basics - Anfänger-Themen 3
D KeyListener nicht mehr aktiv nach ActionPerformed Java Basics - Anfänger-Themen 2
C Mehrere Tasten beim KeyListener gleichzeitig lesen Java Basics - Anfänger-Themen 2
L Input/Output Java 3D mit KeyListener Java Basics - Anfänger-Themen 1
S KeyListener reagiert nicht. Java Basics - Anfänger-Themen 4
L KeyListener ohne textfeld Java Basics - Anfänger-Themen 4
J KeyListener,MouseListener,MouseMotionListener und static Java Basics - Anfänger-Themen 7
P Klassen Bei KeyEvent in KeyListener den Tastendruck abbrechen Java Basics - Anfänger-Themen 5
B KeyListener als allgemeine Methode Java Basics - Anfänger-Themen 5
H KeyListener auf ganzes Fenster setzen Java Basics - Anfänger-Themen 14
0 KeyListener ausserhalb der Applikation Java Basics - Anfänger-Themen 5
G KeyListener Java Basics - Anfänger-Themen 4
D KeyListener und ActionListener Problem Java Basics - Anfänger-Themen 6
J KeyListener funtioniert nicht! Java Basics - Anfänger-Themen 3
J KeyListener Java Basics - Anfänger-Themen 11
P Input/Output KeyListener reagiert nicht Java Basics - Anfänger-Themen 4
G KeyListener, Fokus Java Basics - Anfänger-Themen 8
A Input/Output Keylistener Aktiv schalten Java Basics - Anfänger-Themen 8
J keyListener - Genau 1 Aktion soll bei 1 Tastenausdruck ausgeführt werden Java Basics - Anfänger-Themen 11
S KeyListener Java Basics - Anfänger-Themen 2
A Erste Schritte Problem mit KeyListener Java Basics - Anfänger-Themen 6
Maxim6394 KeyListener geht nicht Java Basics - Anfänger-Themen 15
A Wie KeyListener adden? Java Basics - Anfänger-Themen 15
U KeyListener StackOverflowError Java Basics - Anfänger-Themen 2
W KeyListener auf Applet mit Runnable Java Basics - Anfänger-Themen 4
M Apfel-Spiel KeyListener Java Basics - Anfänger-Themen 33
Luk10 KeyListener Java Basics - Anfänger-Themen 13
S KeyListener aus anderer Klasse hinzufügen Java Basics - Anfänger-Themen 19
P KeyListener im Applet Java Basics - Anfänger-Themen 2
S KeyListener-Anwendung Java Basics - Anfänger-Themen 7
A KeyListener funzt ned Java Basics - Anfänger-Themen 6
D KeyListener, Unterscheidung Groß/Kleinbuchstaben Java Basics - Anfänger-Themen 3
S KeyListener als class? Java Basics - Anfänger-Themen 4
F Applet mit KeyListener, "Alt"-Taste und Konflikt mit Browser Java Basics - Anfänger-Themen 2
P KeyListener Java Basics - Anfänger-Themen 2
S KeyListener für einfaches Programm Java Basics - Anfänger-Themen 3
S KeyListener aktiv auch wenn minimiert? Java Basics - Anfänger-Themen 4
Z Globaler Keylistener Java Basics - Anfänger-Themen 2
V KeyListener Beispiel Java Basics - Anfänger-Themen 13
T canvas killt KeyListener Java Basics - Anfänger-Themen 2
J Keylistener aber wie jTextField auswahl? Java Basics - Anfänger-Themen 3
D KeyListener, nichts passiert Java Basics - Anfänger-Themen 6
D Keylistener zu langsam Java Basics - Anfänger-Themen 7
C Problem mit JPopupMenu, JTextField und Keylistener Java Basics - Anfänger-Themen 2
G Keylistener in einer Schleife Java Basics - Anfänger-Themen 9
M problem mit keylistener Java Basics - Anfänger-Themen 2
N KeyListener ohne GUI? Java Basics - Anfänger-Themen 5
M KeyListener Java Basics - Anfänger-Themen 3
T KeyListener wird nicht ausgelöst Java Basics - Anfänger-Themen 6
O KeyListener Java Basics - Anfänger-Themen 8
Developer_X KeyListener ohne JFrame Java Basics - Anfänger-Themen 13
H KeyListener Java Basics - Anfänger-Themen 4
Developer_X KeyListener Actions (hat mit Java3D zu tun) Java Basics - Anfänger-Themen 20
Developer_X JFrame soll KeyListener adden Java Basics - Anfänger-Themen 32
F Keylistener Java Basics - Anfänger-Themen 12
hdi KeyListener : keyTyped() nicht nutzbar? Java Basics - Anfänger-Themen 1
StickToFreak Runnable + KeyListener? Java Basics - Anfänger-Themen 32
dl85hej Keylistener Java Basics - Anfänger-Themen 16
H KeyListener will nicht reagieren Java Basics - Anfänger-Themen 5
R Fehlersuche - KeyListener, KeyAdaper - Nichts Klappt! Java Basics - Anfänger-Themen 2
G Prob. mit KeyListener und Unterklasse Java Basics - Anfänger-Themen 5
G Keylistener nur besimmte Zeichen zulassen Java Basics - Anfänger-Themen 8
hdi keylistener hat keinen fokus oder: listener ohne frame? Java Basics - Anfänger-Themen 10
D KeyListener Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben