Wie werte vergleichen, die in actionPerformed-Methode hängen ?

Squeepo

Neues Mitglied
Hi,

bin gerade dabei ein kleines Memory Spiel zu basteln und hänge da gerade gewaltig an einer Stelle.
Hab die GUI soweit fertig ich habe eine Fläche mit 40 JButtons, durch einen Klick auf den jeweiligen Button wird durch .setText("xxx"); der jeweilige Name der Kachel angezeigt.
Nun muss der Spieler eben 2mal die gleiche Kachel finden.
Ich finde gerade allerdings keine Möglichkeit wie ich es anstelle die Klicks zu zählen und bei 2 Klicks falls die Kacheln nicht übereinstimmen diese wieder um zu drehen oder bei Übereinstimmung zu färben oder auszublenden, ist ja egal.
Hier mal mein bisheriger Code :

Java:
//Java Extension Packages  
import javax.swing.*;
import javax.swing.undo.*;
//Java Core Packages  
import java.awt.*;  
import java.awt.event.*;  
import java.util.Arrays;
import java.util.Collections;
 
 
public class memory extends JFrame {
       
        //Initializing Component
       	private int click=0;
        private JButton a1,a2,b1,b2,c1,c2,d1,d2,e1,e2,f1,f2,g1,g2,h1,h2,i1,i2,j1,j2,k1,k2,l1,l2,m1,m2,n1,n2,o1,o2,p1,p2,q1,q2,r1,r2,s1,s2,t1,t2;
        private JPanel panel1;
 
        //setting up GUI
       
        public memory(){
               
                //Title of the Window
                super("Fantasy Memory v1.1");
                //Size of Window
                setSize(1200,500);
                
               
               
                //Exit Property of Window
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
               
                //Constructing JPanel
                panel1 = new JPanel();
                
               
                
                //Constructing JButton
                a1 = new JButton();  
                a2 = new JButton();
               
                b1 = new JButton();
                b2 = new JButton();
               
                c1 = new JButton();
                c2 = new JButton();
               
                d1 = new JButton();
                d2 = new JButton();
               
                e1 = new JButton();
                e2 = new JButton();
               
                f1 = new JButton();
                f2 = new JButton();
               
                g1 = new JButton();
                g2 = new JButton();
               
                h1 = new JButton();
                h2 = new JButton();
               
                i1 = new JButton();
                i2 = new JButton();
               
                j1 = new JButton();
                j2 = new JButton();
               
                k1 = new JButton();
                k2 = new JButton();
               
                l1 = new JButton();
                l2 = new JButton();
               
                m1 = new JButton();
                m2 = new JButton();
               
                n1 = new JButton();
                n2 = new JButton();
               
                o1 = new JButton();
                o2 = new JButton();
               
                p1 = new JButton();
                p2 = new JButton();
               
                q1 = new JButton();
                q2 = new JButton();
               
                r1 = new JButton();
                r2 = new JButton();
               
                s1 = new JButton();
                s2 = new JButton();
               
                t1 = new JButton();
                t2 = new JButton();
               
                //Set the Labels of the JButton in uniform alignment  
                a1.setHorizontalAlignment(SwingConstants.LEFT);  
                a2.setHorizontalAlignment(SwingConstants.LEFT);  
                b1.setHorizontalAlignment(SwingConstants.LEFT);  
                b2.setHorizontalAlignment(SwingConstants.LEFT);  
                c1.setHorizontalAlignment(SwingConstants.LEFT);  
                c2.setHorizontalAlignment(SwingConstants.LEFT);
                d1.setHorizontalAlignment(SwingConstants.LEFT);
                d2.setHorizontalAlignment(SwingConstants.LEFT);
                e1.setHorizontalAlignment(SwingConstants.LEFT);
                e2.setHorizontalAlignment(SwingConstants.LEFT);
                f1.setHorizontalAlignment(SwingConstants.LEFT);
                f2.setHorizontalAlignment(SwingConstants.LEFT);
                g1.setHorizontalAlignment(SwingConstants.LEFT);
                g2.setHorizontalAlignment(SwingConstants.LEFT);
                h1.setHorizontalAlignment(SwingConstants.LEFT);
                h2.setHorizontalAlignment(SwingConstants.LEFT);
                i1.setHorizontalAlignment(SwingConstants.LEFT);
                i2.setHorizontalAlignment(SwingConstants.LEFT);
                j1.setHorizontalAlignment(SwingConstants.LEFT);
                j2.setHorizontalAlignment(SwingConstants.LEFT);
                k1.setHorizontalAlignment(SwingConstants.LEFT);
                k2.setHorizontalAlignment(SwingConstants.LEFT);
                l1.setHorizontalAlignment(SwingConstants.LEFT);
                l2.setHorizontalAlignment(SwingConstants.LEFT);
                m1.setHorizontalAlignment(SwingConstants.LEFT);
                m2.setHorizontalAlignment(SwingConstants.LEFT);
                n1.setHorizontalAlignment(SwingConstants.LEFT);
                n2.setHorizontalAlignment(SwingConstants.LEFT);
                o1.setHorizontalAlignment(SwingConstants.LEFT);
                o2.setHorizontalAlignment(SwingConstants.LEFT);
                p1.setHorizontalAlignment(SwingConstants.LEFT);
                p2.setHorizontalAlignment(SwingConstants.LEFT);
                q1.setHorizontalAlignment(SwingConstants.LEFT);
                q2.setHorizontalAlignment(SwingConstants.LEFT);
                r1.setHorizontalAlignment(SwingConstants.LEFT);
                r2.setHorizontalAlignment(SwingConstants.LEFT);
                s1.setHorizontalAlignment(SwingConstants.LEFT);
                s2.setHorizontalAlignment(SwingConstants.LEFT);
                t1.setHorizontalAlignment(SwingConstants.LEFT);
                t2.setHorizontalAlignment(SwingConstants.LEFT);
               
                Container pane = getContentPane();
               
                //Setting the layout for panel
                GridLayout grid = new GridLayout(5,8);
               
               
                //Random
                JButton randomZahl[]={a1,a2,b1,b2,c1,c2,d1,d2,e1,e2,f1,f2,g1,g2,h1,h2,i1,i2,j1,j2,k1,k2,l1,l2,m1,m2,n1,n2,o1,o2,p1,p2,q1,q2,r1,r2,s1,s2,t1,t2};
               
                
                double zahlRem = Math.random();
                int zahlRemint = (int) (zahlRem * 10);
            //System.out.println(zahlRemint);  
                Collections.shuffle(Arrays.asList(randomZahl));
               
               
               
                //Adding Button to JPanel
                panel1.setLayout(grid);
                panel1.add(randomZahl[0]);
                panel1.add(randomZahl[1]);
                panel1.add(randomZahl[2]);
                panel1.add(randomZahl[3]);
                panel1.add(randomZahl[4]);
                panel1.add(randomZahl[5]);
                panel1.add(randomZahl[6]);
                panel1.add(randomZahl[7]);
                panel1.add(randomZahl[8]);
                panel1.add(randomZahl[9]);
                panel1.add(randomZahl[10]);
                panel1.add(randomZahl[11]);
                panel1.add(randomZahl[12]);
                panel1.add(randomZahl[13]);
                panel1.add(randomZahl[14]);
                panel1.add(randomZahl[15]);
                panel1.add(randomZahl[16]);
                panel1.add(randomZahl[17]);
                panel1.add(randomZahl[18]);
                panel1.add(randomZahl[19]);
                panel1.add(randomZahl[20]);
                panel1.add(randomZahl[21]);
                panel1.add(randomZahl[22]);
                panel1.add(randomZahl[23]);
                panel1.add(randomZahl[24]);
                panel1.add(randomZahl[25]);
                panel1.add(randomZahl[26]);
                panel1.add(randomZahl[27]);
                panel1.add(randomZahl[28]);
                panel1.add(randomZahl[29]);
                panel1.add(randomZahl[30]);
                panel1.add(randomZahl[31]);
                panel1.add(randomZahl[32]);
                panel1.add(randomZahl[33]);
                panel1.add(randomZahl[34]);
                panel1.add(randomZahl[35]);
                panel1.add(randomZahl[36]);
                panel1.add(randomZahl[37]);
                panel1.add(randomZahl[38]);
                panel1.add(randomZahl[39]);
               
               
          
               //Buttons bei Klick mit Text belegen
                
                a1.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				a1.setText("Aladin");
                				a1.revalidate();
                				click++;
                			}
                		}
                		);
                a2.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				a2.setText("Aladin");
                				a2.revalidate();
                				click++;
                			}
                		}
                		);
                b1.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				b1.setText("Basilisk");
                				b1.revalidate();
                				click++;
                			}
                		}
                		);
                b2.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				b2.setText("Basilisk");
                				b2.revalidate();
                				click++;
                			}
                		}
                		);
                c1.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				c1.setText("Chimäre");
                				c1.revalidate();
                				click++;
                			}
                		}
                		);
                c2.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				c2.setText("Chimäre");
                				c2.revalidate();
                				click++;
                			}
                		}
                		);
                d1.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				d1.setText("Dwarf");
                				d1.revalidate();
                				click++;
                			}
                		}
                		);
                d2.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				d2.setText("Dwarf");
                				d2.revalidate();
                				click++;
                			}
                		}
                		);
                e1.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				e1.setText("Elf");
                				e1.revalidate();
                				click++;
                			}
                		}
                		);
                e2.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				e2.setText("Elf");
                				e2.revalidate();
                				click++;
                			}
                		}
                		);
                f1.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				f1.setText("Fee");
                				f1.revalidate();
                				click++;
                			}
                		}
                		);
                f2.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				f2.setText("Fee");
                				f2.revalidate();
                				click++;
                			}
                		}
                		);
                g1.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				g1.setText("Gnom");
                				g1.revalidate();
                				click++;
                			}
                		}
                		);
                g2.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				g2.setText("Gnom");
                				g2.revalidate();
                				click++;
                			}
                		}
                		);
                h1.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				h1.setText("Harpyie");
                				h1.revalidate();
                				click++;
                			}
                		}
                		);
                h2.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				h2.setText("Harpyie");
                				h2.revalidate();
                				click++;
                			}
                		}
                		);
                i1.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				i1.setText("Imp");
                				i1.revalidate();
                				click++;
                			}
                		}
                		);
                i2.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				i2.setText("Imp");
                				i2.revalidate();
                				click++;
                			}
                		}
                		);
                j1.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				j1.setText("Java");
                				j1.revalidate();
                				click++;
                			}
                		}
                		);
                j2.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				j2.setText("Java");
                				j2.revalidate();
                				click++;
                			}
                		}
                		);
                k1.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				k1.setText("Kobold");
                				k1.revalidate();
                				click++;
                			}
                		}
                		);
                k2.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				k2.setText("Kobold");
                				k2.revalidate();
                				click++;
                			}
                		}
                		);
                l1.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				l1.setText("Leprechaun");
                				l1.revalidate();
                				click++;
                				
                			}
                		}
                		);
                l2.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				l2.setText("Leprechaun");
                				l2.revalidate();
                				click++;
                				
                			}
                		}
                		);
                m1.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				m1.setText("Medusa");
                				m1.revalidate();
                				click++;
                			}
                		}
                		);
                m2.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				m2.setText("Medusa");
                				m2.revalidate();
                				click++;
                				
                			}
                		}
                		);
                n1.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				n1.setText("Narnia");
                				n1.revalidate();
                				click++;
                			}
                		}
                		);
                n2.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				n2.setText("Narnia");
                				n2.revalidate();
                				click++;
                			}
                		}
                		);
                o1.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				o1.setText("Ork");
                				o1.revalidate();
                				click++;
                			}
                		}
                		);
                o2.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				o2.setText("Ork");
                				o2.revalidate();
                				click++;
                			}
                		}
                		);
                p1.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				p1.setText("Phönix");
                				p1.revalidate();
                				click++;
                			}
                		}
                		);
                p2.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				p2.setText("Phönix");
                				p2.revalidate();
                				click++;
                			}
                		}
                		);
                q1.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				q1.setText("Angel");
                				q1.revalidate();
                				click++;
                			}
                		}
                		);
                q2.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				q2.setText("Angel");
                				q2.revalidate();
                				click++;
                			}
                		}
                		);
                r1.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				r1.setText("Riese");
                				r1.revalidate();
                				click++;
                			}
                		}
                		);
                r2.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				r2.setText("Riese");
                				r2.revalidate();
                				click++;
                			}
                		}
                		);
                s1.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				s1.setText("Sphinx");
                				s1.revalidate();
                				click++;
                			}
                		}
                		);
                s2.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				s2.setText("Sphinx");
                				s2.revalidate();
                				click++;
                			}
                		}
                		);
                t1.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				t1.setText("Triade");
                				t1.revalidate();
                				click++;
                			}
                		}
                		);
                t2.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				t2.setText("Triade");
                				t2.revalidate();
                				click++;
                                }
                		}
                		);
                
                
                    System.out.println(click);          
                   
                     
                //Arrys zum Vergleich anlegen
                
                //JButton[] kacheln1 ={a1, b1, c1, d1, e1, f1, g1, h1, i1, j1, k1, l1, m1, n1, o1, p1, q1, r1, s1, t1};
               
               
               
                pane.add(panel1);  
                 
              
                setContentPane(pane);  
                setVisible(true);  
                }     
               
               
        
       
        public static void main(String[] args){
               
                memory m1 = new memory();
                
        }
       
       
       
 
}

Man könnte das bestimmt mit hilfe von Arrays usw. einiges kürzen allerdings spielt das für mich momentan noch nicht so die Rolle, erstmal muss es funktionieren 😳 .

Wie ihr vielleicht sehen könnt habe ich schon versucht einen click-Zähler zu nutzen, der dann bei click == 2 evtl. einen UndoManager oder sowas ausführt, da habe ich noch keine genauere Idee.
Allerdings verstehe ich nicht wieso ich mit private int click;
Zwar die Klicks in den actionPerformed-Methoden zählen kann, außerhalb mit System.out.println(click); aber keine Rückmeldung bekomme obwohl ich mich doch in der gleichen Klasse befinde?

Und wie könnte ich die aufeinander folgenden 2 Klicks vergleichen ?

Falls es jemandem Hilfe habe ich die .jar angehängt.

Danke euch.

lg Simon
 

Anhänge

Zuletzt bearbeitet:
Java:
System.out.println(click);
Wennd u das am Ende des Konstruktors aufrufst, bekommst du logischer weise immer 0 zurück.
Du musst das schon in den actionPerformed Methoden aufrufen.
Ansonsten: Verwende Arrays zum verwalten deiner Buttons, das ist äußerst unübersichtlich und redundant.
 
Schonmal danke für die Antwort.
Irgendwie bekomme ich das mit dem private nicht ganz auf die Reihe.
Das zählt doch für die Klasse, also das click sollte in der ganzen Klasse gültig sein und sich auch ändern oder nicht ? Also wenn ich bei Buttonclick click++ mache müsste mir das System.out.println(click); am Ende doch 1 ausgeben ?
Habe wohl irgendwo einen Denkfehler, wäre super wenn mir das kurz mal jemand erläutern könnte.

Um die Übersicht zu verbessern habe ich gerade noch etwas mit den Arrays experimentiert, aber auch das will nicht und ich verstehe nicht wieso ;(.
Hier der Versuch :
Java:
JButton kacheln[]={a1, b1, c1, d1, e1, f1, g1, h1, i1, j1, k1, l1, m1, n1, o1, p1, q1, r1, s1, t1, a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2, q2, r2, s2, t2};
               
                
                //Constructing JButton
                for (int i = 0; i < kacheln.length; i++) {
					kacheln[i] = new JButton();
					//kacheln[i].setHorizontalAlignment(SwingConstants.LEFT);
				}

Ich habe ein Array in dem alle Buttons angelegt sind, durch die for-Schleife steht doch dann im Endeffekt : a1 = new JButton(); --> b1 = new JButton(); usw. :bahnhof: .

Okay, dann nächster Schritt.

Java:
a1.addActionListener(
                		new ActionListener(){
                			public void actionPerformed(ActionEvent event) {
                				a1.setText("Aladin");
                				a1.revalidate();
                				click++;
                				if(click==3){
                					????????
                				}
                			}
                		}
                		);

Ich zähle mit click++; in den actionPerformed-Methoden hoch und wenn click 3 erreicht hat ( mit 2 Klicks keine passenden Kacheln gefunden wurden ) sollen die Kacheln wieder umgedreht werden, leider werde ich aus dem UndoManager nicht schlau.
Geht es auch ohne ?
Also sagen wir mal wenn 2 passende Kacheln gefunden wurden mache ich bei diesen .setVisible(false);.
Also sind alle übrigen Kacheln dann noch auf .setVisible(true); könnte ich nun mit einer for-Schleife bei all diesen .setText(""); machen ?
Evtl. so ???:L

Java:
for(int i=0; i<kacheln.length; i++){

  if(kacheln[i].setVisible()==true){
      kacheln[i].setText("");
     }
}

Ich weis, dass es so auf keinen Fall geht wie ich es geschrieben habe, vor allem kacheln.setVisible()==true aber ich weiß nicht wie man sowas prüfen kann und ich denke ihr habt verstanden, auf was ich hinaus möchte 😀.

Danke für eure Hilfe.

lg Simon
 
Du führst die Namen der Buttons halt in einem Array und verwendest einen gemeinsamen ActionListener für alle Buttons.
Java:
class GlobalActionListener implements ActionListener {
  private JButton first;

  public void actionPerformed(ActionEvent e) {
    JButton b = (JButton) e.getSource();
    Component[] components = b.getParent().getComponents();
    for(int i = 0; i < components.length; i++) {
      if(components[i] == b) {
        if(first != null) {
          if(first.getText().equals(myArray[i]) {
            b.setText(myArray[i]);
            b.setEnabled(false);
            first.setEnabled(false);
          } else {
            first.setText("");
          }
          first = null;
        } else {
          b.setText(myArray[i];
          first = b;
        }
        break;
      }
    }
    revalidate();
    repaint();
  }
}
 
Java:
for(int i=0; i<kacheln.length; i++){

  if(kacheln[i].setVisible()==true){
      kacheln[i].setText("");
     }
}

Java:
   if(kacheln[i].setVisible()==true){
       ...
   }

Hm. die Methode setVisible() ist ein Setter und erfordert einen Parameter des Datentyps Boolean. Somit ist setVisible als Vergleichsoperand schlicht falsch und müsste einen Fehler beim Kompilieren hervorrufen.
Die Methode isVisible() hat einen Boolean als Rückgabetyp, dessen Wert du auf true vergleichen kannst.

Java:
   if (kacheln[i].isVisible()) {
       ...
   }

MfG
 

Zurück
Oben