Problem mit ActionEvent - Abfrage

NordStar

Mitglied
Ich habe hier ein Problem mit dem ActionEvent bzw. Abfrage, ob es der 1. oder 2. klick auf einen der buttons ist. die if(klickmerker==1) bedingung führt er aus aber wenn es der 2. klick ist, sollte er die else-bedingung ausführen, das macht er aber nicht.

Java:
public void actionPerformed(ActionEvent e){
              int xalt = 0;
              int yalt = 0;
              int xneu = 0;
              int yneu = 0;
              int klickmerker = 1;
              int k = 0;
              for(int i=0;i<64;i++){
                 String d = ""+i;
                 if(e.getActionCommand().equals(d)){
                   for(int l=0;l<8;l++){
                     for(int j=0;j<8;j++){
                       if(spielFeld[l][j].getActionCommand().equals(d)){
                         if(klickmerker==1){
                           xalt = j;
                           yalt = l;
                           klickmerker = 2;
                           j = 8;
                           l = 8;
                         }
                         else{
                           xneu = j;
                           yneu = l;
                           steu.zuGpruef(xalt,yalt,xneu,yneu);
                           klickmerker = 1;
                           l = 8;
                           j = 8;
                         }
                       }
                     }
                   }
                 }
              }





        }
 
ok, ich hab klickmerker außerhalb der methode untergebracht, jetzt habe ich aber immernoch ein problem: die methode steu.zuGpruef(...) wird nicht immer aufgerufen, wenn ich z.B. erst den schwarzen turm und dann den weißen anklick passiert nichts (wenn die methode aufgerufen wird, wird eine schwarze königin mitten ins feld reingesetzt, zum prüfen).

EDIT: Er ruft die steu.zuGpruef() nur auf wenn ich irgendein feld 2 mal anklicke!
 
Zuletzt bearbeitet:
Also das Problem, dass hier auftritt ist anscheinend nicht mit Quellcode nachvollziehbar, denn ich kann jedes Feld einmal anklicken und es passiert nichts. Wenn ich aber auf irgendein feld ein zweites mal klicke, wird die else-bedingung ausgeführt.
 
ich habe bisher noch nie mit dem debugger gearbeitet, habe daher keine ahnung was der mir mit dem folgenden sagen will: ich habe zwischen "public void actionPerformed" und am ende dieser methode haltepunkte gesetzt (is des so richtig?) und wenn ich des dann laufen lasse springt bzw. zeigt der mir was an der zeile 192 an, hier wird innerhalb einer for-schleife dem spielfeld ein acctionlistener hinzugefügt, code: this.spielFeld[j].addActionListener(new Listener());
 
Wenn du eclispe verwendest, dann setzte den Breakpoint am anfang der Methhode und drücke dann F6

registrierst du eventeull deinen Listener zu oft?

Ich sehe im obrigen code keine Zeile 192.
 
Zuletzt bearbeitet von einem Moderator:
Hier ist mal mein kompletter code der GUI, ich hoffe es hilft.

Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;
import java.awt.Image.*;
import java.awt.Dimension.*;

public class Oberflaeche extends JFrame {
  Steuerung steu;
  JFrame fenster;
  JPanel mitte,boxunten,friedr,friedl,friedr2,friedl2,mitte2,uber;
  JLabel friedw,frieds,info,pl1,pl2;
  JButton spielFeld[][] = new JButton[8][8];
  JButton friedHofw[][] = new JButton[8][3];
  JButton friedHofs[][] = new JButton[8][3];
  Image image1 = new ImageIcon(getClass().getResource("pawnwH.gif")).getImage();
  Image image2 = new ImageIcon(getClass().getResource("pawnwD.gif")).getImage();
  Image image3 = new ImageIcon(getClass().getResource("bishopwH.gif")).getImage();
  Image image4 = new ImageIcon(getClass().getResource("bishopwD.gif")).getImage();
  Image image5 = new ImageIcon(getClass().getResource("kingwH.gif")).getImage();
  Image image6 = new ImageIcon(getClass().getResource("kingwD.gif")).getImage();
  Image image7 = new ImageIcon(getClass().getResource("queenwH.gif")).getImage();
  Image image8 = new ImageIcon(getClass().getResource("queenwD.gif")).getImage();
  Image image9 = new ImageIcon(getClass().getResource("rookwH.gif")).getImage();
  Image image10 = new ImageIcon(getClass().getResource("rookwD.gif")).getImage();
  Image image11 = new ImageIcon(getClass().getResource("knightwH.gif")).getImage();
  Image image12 = new ImageIcon(getClass().getResource("knightwD.gif")).getImage();
  Image image13 = new ImageIcon(getClass().getResource("pawnbH.gif")).getImage();
  Image image14 = new ImageIcon(getClass().getResource("pawnbD.gif")).getImage();
  Image image15 = new ImageIcon(getClass().getResource("bishopbH.gif")).getImage();
  Image image16 = new ImageIcon(getClass().getResource("bishopbD.gif")).getImage();
  Image image17 = new ImageIcon(getClass().getResource("kingbH.gif")).getImage();
  Image image18 = new ImageIcon(getClass().getResource("kingbD.gif")).getImage();
  Image image19 = new ImageIcon(getClass().getResource("queenbH.gif")).getImage();
  Image image20 = new ImageIcon(getClass().getResource("queenbD.gif")).getImage();
  Image image21 = new ImageIcon(getClass().getResource("rookbH.gif")).getImage();
  Image image22 = new ImageIcon(getClass().getResource("rookbD.gif")).getImage();
  Image image23 = new ImageIcon(getClass().getResource("knightbH.gif")).getImage();
  Image image24 = new ImageIcon(getClass().getResource("knightbD.gif")).getImage();
  Image image25 = new ImageIcon(getClass().getResource("pawnw.gif")).getImage();
  Image image26 = new ImageIcon(getClass().getResource("pawnb.gif")).getImage();
  Image image27 = new ImageIcon(getClass().getResource("bishopw.gif")).getImage();
  Image image28 = new ImageIcon(getClass().getResource("bishopb.gif")).getImage();
  Image image29 = new ImageIcon(getClass().getResource("kingw.gif")).getImage();
  Image image30 = new ImageIcon(getClass().getResource("kingb.gif")).getImage();
  Image image31 = new ImageIcon(getClass().getResource("queenw.gif")).getImage();
  Image image32 = new ImageIcon(getClass().getResource("queenb.gif")).getImage();
  Image image33 = new ImageIcon(getClass().getResource("rookw.gif")).getImage();
  Image image34 = new ImageIcon(getClass().getResource("rookb.gif")).getImage();
  Image image35 = new ImageIcon(getClass().getResource("knightw.gif")).getImage();
  Image image36 = new ImageIcon(getClass().getResource("knightb.gif")).getImage();
  Image image37 = new ImageIcon(getClass().getResource("hell.gif")).getImage();
  Image image38 = new ImageIcon(getClass().getResource("dunkel.gif")).getImage();
  ImageIcon img1 = new ImageIcon(image1.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img2 = new ImageIcon(image2.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img3 = new ImageIcon(image3.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img4 = new ImageIcon(image4.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img5 = new ImageIcon(image5.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img6 = new ImageIcon(image6.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img7 = new ImageIcon(image7.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img8 = new ImageIcon(image8.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img9 = new ImageIcon(image9.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img10 = new ImageIcon(image10.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img11 = new ImageIcon(image11.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img12 = new ImageIcon(image12.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img13 = new ImageIcon(image13.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img14 = new ImageIcon(image14.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img15 = new ImageIcon(image15.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img16 = new ImageIcon(image16.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img17 = new ImageIcon(image17.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img18 = new ImageIcon(image18.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img19 = new ImageIcon(image19.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img20 = new ImageIcon(image20.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img21 = new ImageIcon(image21.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img22 = new ImageIcon(image22.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img23 = new ImageIcon(image23.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img24 = new ImageIcon(image24.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img25 = new ImageIcon(image25.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img26 = new ImageIcon(image26.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img27 = new ImageIcon(image27.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img28 = new ImageIcon(image28.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img29 = new ImageIcon(image29.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img30 = new ImageIcon(image30.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img31 = new ImageIcon(image31.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img32 = new ImageIcon(image32.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img33 = new ImageIcon(image33.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img34 = new ImageIcon(image34.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img35 = new ImageIcon(image35.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img36 = new ImageIcon(image36.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img37 = new ImageIcon(image37.getScaledInstance(85,85,Image.SCALE_SMOOTH ));
  ImageIcon img38 = new ImageIcon(image38.getScaledInstance(85,85,Image.SCALE_SMOOTH ));


  class Listener implements ActionListener{
              int klickmerker = 1;
              int xalt = 0;
              int yalt = 0;
              int xneu = 0;
              int yneu = 0;
              String d = "";
        public void actionPerformed(ActionEvent e){
              for(int i=0;i<64;i++){
                 d = ""+i;
                 if(e.getActionCommand().equals(d)){
                   for(int l=0;l<8;l++){
                     for(int j=0;j<8;j++){
                       if(spielFeld[l][j].getActionCommand().equals(d)){
                         if(klickmerker==1){
                           xalt = j;
                           yalt = l;
                           klickmerker = 2;
                           j = 8;
                           l = 8;
                           i = 64;
                         }
                         else{
                           xneu = j;
                           yneu = l;
                           steu.zuGpruef(xalt,yalt,xneu,yneu);
                           klickmerker = 1;
                           l = 8;
                           j = 8;
                           i = 64;
                         }
                       }
                     }
                   }
                 }
              }





        }
    }

  public Oberflaeche(Steuerung st) {
    this.steu = st;
    this.friedw = new JLabel("Friedhof Weiß", Label.LEFT);
    this.frieds = new JLabel("Friedhof Schwarz", Label.LEFT);
    this.pl1 = new JLabel();
    this.pl2 = new JLabel();
    this.info = new JLabel("Weiß beginnt");
    this.mitte = new JPanel();
    this.mitte2 = new JPanel(new GridBagLayout());
    this.uber = new JPanel();
    this.uber.setLayout(new GridLayout(1,4));
    this.friedr = new JPanel();
    this.friedl = new JPanel();
    this.friedr2 = new JPanel(new GridBagLayout());
    this.friedl2 = new JPanel(new GridBagLayout());
    this.friedl.setLayout(new GridLayout(8,4));
    this.friedr.setLayout(new GridLayout(8,4));
    this.boxunten = new JPanel();
    this.boxunten.add(info);
    this.fenster = new JFrame("Schachspiel");
    this.fenster.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    this.fenster.setSize(1400,800);
    this.fenster.setLayout(new BorderLayout());
    this.mitte.setLayout(new GridLayout(8,8));
    this.friedr.setPreferredSize(new Dimension(255,680));
    this.friedr.setMinimumSize(new Dimension(255, 680));
    this.friedl.setPreferredSize(new Dimension(255,680));
    this.friedl.setMinimumSize(new Dimension(255, 680));
    this.uber.add(frieds);
    this.uber.add(pl1);
    this.uber.add(pl2);
    this.uber.add(friedw);
    this.mitte.setPreferredSize(new Dimension(690,690));
    this.mitte.setMinimumSize(new Dimension(690, 690));
    GridBagConstraints gbc = new GridBagConstraints();
    gbc.fill = GridBagConstraints.NONE;
    this.mitte2.add(mitte, gbc);
    this.friedr2.add(friedr, gbc);
    this.friedl2.add(friedl, gbc);
    this.fenster.add(mitte2,BorderLayout.CENTER);
    this.fenster.add(uber,BorderLayout.NORTH);
    this.fenster.add(friedl2,BorderLayout.WEST);
    this.fenster.add(friedr2,BorderLayout.EAST);
    this.fenster.add(boxunten,BorderLayout.SOUTH);
    int k = 0;
    String aa = "";
    for(int i=0;i<8;i++){
      for(int j=0;j<8;j++){
          aa = ""+k;
          this.spielFeld[i][j] = new JButton();
          this.spielFeld[i][j].setMinimumSize(new Dimension(85,85));
          this.spielFeld[i][j].setPreferredSize(new Dimension(85,85));
          this.mitte.add(spielFeld[i][j]);
          this.spielFeld[i][j].addActionListener(new Listener());
          this.spielFeld[i][j].setActionCommand(aa);
          k = k+1;
      }
    }
    for(int i=0;i<8;i++){
      for(int j=0;j<3;j++){
          this.friedHofw[i][j] = new JButton();
          this.friedHofs[i][j] = new JButton();
          this.friedHofw[i][j].setMinimumSize(new Dimension(85,85));
          this.friedHofw[i][j].setPreferredSize(new Dimension(85,85));
          this.friedHofw[i][j].setMaximumSize(new Dimension(85,85));
          this.friedHofs[i][j].setMinimumSize(new Dimension(85,85));
          this.friedHofs[i][j].setPreferredSize(new Dimension(85,85));
          this.friedHofs[i][j].setMaximumSize(new Dimension(85,85));
          this.friedr.add(friedHofw[i][j]);
          this.friedl.add(friedHofs[i][j]);
          this.friedHofw[i][j].setVisible(false);
          this.friedHofs[i][j].setVisible(false);
          this.friedHofw[i][j].addActionListener(new Listener());
          this.friedHofs[i][j].addActionListener(new Listener());
          this.friedHofw[i][j].setBackground(new Color(238, 238, 238));
          this.friedHofs[i][j].setBackground(new Color(238, 238, 238));
          this.friedHofw[i][j].setBorder(new EmptyBorder(1,1,1,1));
          this.friedHofs[i][j].setBorder(new EmptyBorder(1,1,1,1));
          this.friedHofw[i][j].setEnabled(false);
          this.friedHofs[i][j].setEnabled(false);
      }
    }
    this.spielFeld[0][0].setIcon(img21);
    this.spielFeld[0][1].setIcon(img24);
    this.spielFeld[0][2].setIcon(img15);
    this.spielFeld[0][3].setIcon(img20);
    this.spielFeld[0][4].setIcon(img17);
    this.spielFeld[0][5].setIcon(img16);
    this.spielFeld[0][6].setIcon(img23);
    this.spielFeld[0][7].setIcon(img22);
    this.spielFeld[7][0].setIcon(img10);
    this.spielFeld[7][1].setIcon(img11);
    this.spielFeld[7][2].setIcon(img4);
    this.spielFeld[7][3].setIcon(img7);
    this.spielFeld[7][4].setIcon(img6);
    this.spielFeld[7][5].setIcon(img3);
    this.spielFeld[7][6].setIcon(img12);
    this.spielFeld[7][7].setIcon(img9);
    for(int i=2;i<6;i++){
      for(int j=0;j<8;j++){
          this.spielFeld[i][j].setIcon(img37);
          j = j+1;
          this.spielFeld[i][j].setIcon(img38);
      }
      i = i+1;
    }
    for(int i=2;i<6;i++){
      i = i+1;
      for(int j=0;j<7;j++){
          j = j+1;
          this.spielFeld[i][j].setIcon(img37);
          j = j-1;
          this.spielFeld[i][j].setIcon(img38);
          j = j+1;
      }
    }
    for(int i=0;i<8;i++){
        this.spielFeld[1][i].setIcon(img14);
        this.spielFeld[1][i+1].setIcon(img13);
        this.spielFeld[6][i].setIcon(img1);
        this.spielFeld[6][i+1].setIcon(img2);
        i = i+1;
    }
    //this.friedHofw[0][0].setIcon(img27);
    //this.friedHofw[0][0].setVisible(true);
    //this.friedHofw[0][0].setDisabledIcon(img27);
    this.fenster.setResizable(false);
    this.fenster.setVisible(true);
  }
  public void setInfo(String a){
    info.setText(a);
  }
  public void setFeld(int x, int y, int typ, int farbe){
      boolean boolx = false;
      boolean booly = false;
      boolx = isEvenRest(x);
      booly = isEvenRest(y);
      if(farbe==7){
        if(typ==1){
          if(boolx==true){
            if(booly==true){
              this.spielFeld[y][x].setIcon(img1);
            }
            else{
              this.spielFeld[y][x].setIcon(img2);
            }
          }
          else{
            if(booly==true){
              this.spielFeld[y][x].setIcon(img2);
            }
            else{
              this.spielFeld[y][x].setIcon(img1);
            }
          }
        }
        if(typ==2){
          if(boolx==true){
            if(booly==true){
              this.spielFeld[y][x].setIcon(img3);
            }
            else{
              this.spielFeld[y][x].setIcon(img4);
            }
          }
          else{
            if(booly==true){
              this.spielFeld[y][x].setIcon(img4);
            }
            else{
              this.spielFeld[y][x].setIcon(img3);
            }
          }
        }
        if(typ==3){
          if(boolx==true){
            if(booly==true){
              this.spielFeld[y][x].setIcon(img11);
            }
            else{
              this.spielFeld[y][x].setIcon(img12);
            }
          }
          else{
            if(booly==true){
              this.spielFeld[y][x].setIcon(img12);
            }
            else{
              this.spielFeld[y][x].setIcon(img11);
            }
          }
        }
        if(typ==4){
          if(boolx==true){
            if(booly==true){
              this.spielFeld[y][x].setIcon(img9);
            }
            else{
              this.spielFeld[y][x].setIcon(img10);
            }
          }
          else{
            if(booly==true){
              this.spielFeld[y][x].setIcon(img10);
            }
            else{
              this.spielFeld[y][x].setIcon(img9);
            }
          }
        }
        if(typ==5){
          if(boolx==true){
            if(booly==true){
              this.spielFeld[y][x].setIcon(img7);
            }
            else{
              this.spielFeld[y][x].setIcon(img8);
            }
          }
          else{
            if(booly==true){
              this.spielFeld[y][x].setIcon(img8);
            }
            else{
              this.spielFeld[y][x].setIcon(img7);
            }
          }
        }
        if(typ==6){
          if(boolx==true){
            if(booly==true){
              this.spielFeld[y][x].setIcon(img5);
            }
            else{
              this.spielFeld[y][x].setIcon(img6);
            }
          }
          else{
            if(booly==true){
              this.spielFeld[y][x].setIcon(img6);
            }
            else{
              this.spielFeld[y][x].setIcon(img5);
            }
          }
        }
       else{
        if(typ==1){
          if(boolx==true){
            if(booly==true){
              this.spielFeld[y][x].setIcon(img13);
            }
            else{
              this.spielFeld[y][x].setIcon(img14);
            }
          }
          else{
            if(booly==true){
              this.spielFeld[y][x].setIcon(img14);
            }
            else{
              this.spielFeld[y][x].setIcon(img13);
            }
          }
        }
        if(typ==2){
          if(boolx==true){
            if(booly==true){
              this.spielFeld[y][x].setIcon(img15);
            }
            else{
              this.spielFeld[y][x].setIcon(img16);
            }
          }
          else{
            if(booly==true){
              this.spielFeld[y][x].setIcon(img16);
            }
            else{
              this.spielFeld[y][x].setIcon(img15);
            }
          }
        }
        if(typ==3){
          if(boolx==true){
            if(booly==true){
              this.spielFeld[y][x].setIcon(img23);
            }
            else{
              this.spielFeld[y][x].setIcon(img24);
            }
          }
          else{
            if(booly==true){
              this.spielFeld[y][x].setIcon(img24);
            }
            else{
              this.spielFeld[y][x].setIcon(img23);
            }
          }
        }
        if(typ==4){
          if(boolx==true){
            if(booly==true){
              this.spielFeld[y][x].setIcon(img21);
            }
            else{
              this.spielFeld[y][x].setIcon(img22);
            }
          }
          else{
            if(booly==true){
              this.spielFeld[y][x].setIcon(img22);
            }
            else{
              this.spielFeld[y][x].setIcon(img21);
            }
          }
        }
        if(typ==5){
          if(boolx==true){
            if(booly==true){
              this.spielFeld[y][x].setIcon(img19);
            }
            else{
              this.spielFeld[y][x].setIcon(img20);
            }
          }
          else{
            if(booly==true){
              this.spielFeld[y][x].setIcon(img20);
            }
            else{
              this.spielFeld[y][x].setIcon(img19);
            }
          }
        }
        if(typ==6){
          if(boolx==true){
            if(booly==true){
              this.spielFeld[y][x].setIcon(img17);
            }
            else{
              this.spielFeld[y][x].setIcon(img18);
            }
          }
          else{
            if(booly==true){
              this.spielFeld[y][x].setIcon(img18);
            }
            else{
              this.spielFeld[y][x].setIcon(img17);
            }
          }
        }
       }
      }
  }
  public boolean isEvenRest(int n) {
        return ((n % 2) == 0) ? true : false;
  }
}
 
Java:
for(int l=0;l<8;l++){
                     for(int j=0;j<8;j++){
                       if(spielFeld[l][j].getActionCommand().equals(e.getActionCommand())){
                         if(klickmerker==true){
                           xalt = j;
                           yalt = l;
                           klickmerker = false;
                           j = 8;
                           l = 8;

                         }
                         else{
                           xneu = j;
                           yneu = l;
                           steu.zuGpruef(xalt,yalt,xneu,yneu);
                           klickmerker = true;
                           l = 8;
                           j = 8;

                         }
                       }
                     }
                   }

Hier der aktuelle code für das actionevent.
Ist es möglich, dass das programm für jedes feld den klickmerker extra setzt? also ob jedes feld seinen eigenen klickmerker hat? vom code ist das zwar nicht vorgesehen aber ich würde gerne wissen ob das programm dies trotzdem so interpretieren könnte.
 
Hallo,

es ist so durch das Programm vorgegeben und demnach wird es so ausgeführt.

Statt für jeden button einen neuen Listener() zu erzeugen würde ich für alle nur einen nehmen.

😉

Gruß,

Martin
 

Zurück
Oben