Variablen via actionPerformed mit Buttons ändern

Maximix

Mitglied
Hallo

Als kleine Übung versuche ich gerade eine Art Zahlenschloss mit Buttons zu basteln. Aber irgendwie kann ich den Variablen keine neuen Werte zuweisen.

Java:
           int zahl1 = 0,
			zahl2 = 0,
			zahl3 = 0;				 
		
		if (evt.getActionCommand().equals("3"))
		{
			zahl1 =  3;
		}

Wen ich jetzt mit dem Button "3" die If Anweisung ausführe funktioniert es, also ich kann mit dem Button alles machen, nur will er mir die 3 nicht in "zahl1" speichern.
Wäre super wen mir jemand sagen könnte warum das nicht geht und wie man es richtig machen würde.
Mfg
 
viel zu wenig Code,
wie prüfst du ob etwas korrekt funktioniert oder nicht?
wo sind die Variablen deklariert, wo der Button, das Gesamtprogramm ist interessant
 
Ich wollte eigentlich Platz sparen, hier mal der ganze Code. Aber die Buttons etc funktionieren richtig, das habe ich getestet 😉

Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Zahlenschloss extends JFrame implements ActionListener
{
	JButton Button0;
	JButton Button1;
	JButton Button2;
	JButton Button3;
	JButton Button4;
	JButton Button5;
	JButton Button6;
	JButton Button7;
	JButton Button8;
	JButton Button9;
	JButton Button10;

	public Zahlenschloss (String title)
	{
		super (title);
		
		Button0 = new JButton("0");
		Button1 = new JButton("1");
		Button2 = new JButton("2");
		Button3 = new JButton("3");
		Button4 = new JButton("4");
		Button5 = new JButton("5");
		Button6 = new JButton("6");
		Button7 = new JButton("7");
		Button8 = new JButton("8");
		Button9 = new JButton("9");
		Button10 = new JButton("Öffnen");
		
		Button0.addActionListener(this);
		Button1.addActionListener(this);
		Button2.addActionListener(this);
		Button3.addActionListener(this);
		Button4.addActionListener(this);
		Button5.addActionListener(this);
		Button6.addActionListener(this);
		Button7.addActionListener(this);
		Button8.addActionListener(this);
		Button9.addActionListener(this);
		Button10.addActionListener(this);
		
		Button0.setActionCommand("0");
		Button1.setActionCommand("1");
		Button2.setActionCommand("2");
		Button3.setActionCommand("3");
		Button4.setActionCommand("4");
		Button5.setActionCommand("5");
		Button6.setActionCommand("6");
		Button7.setActionCommand("7");
		Button8.setActionCommand("8");
		Button9.setActionCommand("9");
		Button10.setActionCommand("Öffnen");
		
		setLayout(new FlowLayout());
		
		add (Button0);
		add (Button1);
		add (Button2);
		add (Button3);
		add (Button4);
		add (Button5);
		add (Button6);
		add (Button7);
		add (Button8);
		add (Button9);
		add (Button10);		
		
	}
	
	public void actionPerformed (ActionEvent evt)
	{
		
		int zahl1 = 0,
			zahl2 = 0,
			zahl3 = 0;				 
		
		if (evt.getActionCommand().equals("3"))
		{
			zahl1 =  3;
		}
		if (evt.getActionCommand().equals("5"))
		{
			zahl2 = 5;
		}
		if (evt.getActionCommand().equals("9"))
		{
			zahl3 = 9;
		}
		if (evt.getActionCommand().equals("Öffnen"))
		{
			
			if (zahl1 == 3 && zahl2 ==  5 && zahl3 == 9)
			{				
				getContentPane().setBackground(Color.green);
			}
			else
			{				
				getContentPane().setBackground(Color.red);
			}
		}
							
	}
	
	public static void main(String[] args)
	{
		
		Zahlenschloss demo = new Zahlenschloss("Öffne den Safe!");
		
		demo.setSize(180 , 200);
		demo.setVisible(true);
		
	}
}
 
die drei Variablen legst du immer wieder neu lokal an, dann sind sie 0, höchstens eine davon wird durch den aktuellen Button geändert,
speichere die ints als Instanzattribute, dann kannst du nach und nach alle Zahlen ändern
 
Das wird natürlich nicht funktionieren.
Die Werte die du da in der actionPerformed Methode hast (zahl1,2,3) werden jedes mal neu initialisiert, wenn ein Knopf gedrück wird. Und da hast du dann maximal eine änderung einer der Zahlen 😉
Speichere sie als Instanzvariablen, dann sollte es gehen.
 
Im übrigen noch ein zwei Hinweise:

- Variablen Namen schreibt man klein
- Prüfe auch die Reihenfolge der eingegeben Zahlen. Dein Zahlenschloss nimmt den Code in jeder belibigen Reihenfolge an
- Verwende aussagekräftige Namen (Nicht Button0 Button1 ...)
- Verwende Arrays oder Collections für ähnliche Elemente, Diese kannst du dann auch in einer Schleife instantiieren)

Java:
 //Falls du die Buttons später nicht mehr ändern willst kannst du dir die List auch ganz sparen!
ArrayList<JButton> btnList = new ArrayList<JButton>();

for (int i=0; i<10; i++) {
    JButton btn = new JButton();
    btn.setActionCommand(Integer.toString(i));
    btn.setActionListener(this);
    btnList.add(newJButton()); 
}

PS: Schnell im Broser gehackt. Keine Garantie auf Fehlerfreiheit
 

Zurück
Oben