Problem beim Eventhandling

  • Themenstarter Themenstarter _Matthias__
  • Beginndatum Beginndatum
M

_Matthias__

Gast
Hallo!

Ich programmiere noch nicht sehr lange in Java und bin momentan dabei, das Eventhandling zu lernen.

Ich möchte gerne TikTakToe programmieren.

Leider funktioniert dass noch nicht so wie ich es mir vorgestellt habe.

Programm:
------------------------------------------------------------------------------------------
Java:
import java.awt.*;
import java.awt.event.*;

public class TikTakToe extends Frame implements ActionListener {
	
	int i,x=0;
	int z=1;
	
	static int gw=0;
	
	Button b[]=new Button[10];{
	
	for(i=0;i<10;i++)
	{
		b[i] = new Button(" ");
		b[i].setBackground(Color.LIGHT_GRAY);
	}
	};
	
	Label pl1 = new Label("Spieler 1 (rot): "+gw);
	Label pl2 = new Label("Spieler 2 (blau):");
	
	public TikTakToe(){
		
		setLayout(new BorderLayout());
		
		Panel panel1 = new Panel();
		add((panel1),BorderLayout.NORTH);
		panel1.setLayout(new GridLayout(3,3,0,1));
		
		Panel panel2 = new Panel();
		add((panel2),BorderLayout.SOUTH);
		panel2.setLayout(new FlowLayout());
		
		
		for(i=0;i<=8;i++)
		{
			panel1.add(b[i]);
			b[i].addActionListener(this);
		}
		
		panel2.add(b[9]);
		panel2.add(pl1);
		panel2.add(pl2);
		
		b[9].setLabel("Weiter");
		
		addWindowListener(new WindowAdapter()
		{	public void windowClosing(WindowEvent e)
			{	System.exit(0);
			}
		});
		
		setSize(300,150);
		setVisible(true);
	}
	
	public void actionPerformed(ActionEvent ae){
			
		Object obj = ae.getSource();
		int a=0;
		int i=0,z=0,x=0;
		
//bei betätigen des "Weiter" Buttons sollten alle Felder wieder hellgrau gemacht werden
		if(obj==b[9])
		{
			for(i=0;i<9;i++)
				b[i].setBackground(Color.LIGHT_GRAY);
		}
		
		for(z=1;z<10;z++)
		{
			for(x=0;x<9;x++)
			{
				if(obj==b[x] && b[x].getBackground()== Color.LIGHT_GRAY)
				{	
					if(z%2==0)
						b[x].setBackground(Color.blue);
					else 
						b[x].setBackground(Color.red);
					
					
				}
				
// Überprüfung, ob wer gewonnen hat (erst angefangen)
				if(b[0].getBackground()==b[1].getBackground()&& b[1].getBackground()==b[2].getBackground()) 
				{ 
					a=1;
					break;
				}
				
			}
			
			if(a==1) gw+=1;		
		}
	}

}
------------------------------------------------------------------------------------------

Folgendes Problem:
Wenn ich auf einen Button drücke, färbt sich dieser immer rot.
Wenn ich den "Weiter" Button drücke, passiert gar nichts.

Der Fehler müsste beim überschreiben von actionPerformed passieren, nur weiß ich leider nicht wo.

Würde mich über Tipps und Verbesserungsvorschläge freuen!

Mfg,
Matthias
 
nach der Schleife die alle buttons hellgrau macht nen return?
Ansonsten läuft die Methode weiter und färbt die Buttons wieder um
 
Meinst du ein return nach der Schleife in actionPerformed?

Wie muss ich diese Anweisung denn schreiben?

Wie gesagt, ist erst mein 3. Java Programm mit grafischer Oberfläche.
 
Ich habe die return Anweisung jetzt dazu geschrieben.

Leider wird noch immer jedes Feld auf das ich klicke rot gefärbt.

Und wenn ich auf den "Weiter" Button drücke (es sollte sich das ganze Feld grau färben) passiert nichts....
 
...
Leider wird noch immer jedes Feld auf das ich klicke rot gefärbt.
...

Das liegt daran, dass du in Zeile 62 die Variable z definierst.
Diese wird dann bei jedem Aufruf wieder mit 0 initialisiert.
Da Du sie schon als Klassen-Variable eingeführt hast, kannst Du sie
in Zeile 62 entfernen.

Aber ich denke, dass ist nicht Dein einziges Problem.

VG ROlf
 

Zurück
Oben