Wechsel bei der GUI funktioniert nicht

Rufus.Mueller

Bekanntes Mitglied
Ich habe unten stehende Hauptklasse sowie die Klassen Test und CorsiQuadrat. Beim Starten des Programms sollte, vereinfacht gesagt, das passieren: es geht ein Fenster auf mit blauen Quadraten von denen abwechselnd welche gelb aufleuchten. Funktioniert auch alles, nur das meine Quadrate nicht aufleuchten. Entscheidend ist die Zeile 18 test.testDurchfuehren(); in der Hauptklasse, die Zeileen 33 bis 37 in der Klasse Test:

Code:
        for (int i=0; i<sequenz.length; i++){
            if (sequenz[i] == 1) {
                corsiBloecke.block1.aufblinken();
            }
        }

und die Zeilen 13 bis 18 (Methode aufblinken() ) in der Klasse CorsiQuadrate. Durch Toggle Breakpoints habe ich herausgefunden, dass eigentlich alles wie gewünscht funktioniert. Die Methode aufleuchten() wird wie erwartet aufgerufen, und läuft ab. Nur in meiner GUI merke ich nichts davon (Quadrate bleiben blau).


Java:
import java.util.ArrayList;


public class Main {
		
	//Deklarationsteil
	static Window window;
	static CorsiBloecke corsiBloecke;
	static Test test;
	static VP vp;
	
	public static void main(String args[]) throws Exception{
		window = new Window();
		vp=new VP(1);				//id-Abfrage noch einbauen!
		
		corsiBloecke = new CorsiBloecke();
		test = new Test(2, corsiBloecke, window, vp);   
		test.testDurchfuehren();
	
	
		
		
		

			
}}



Java:
import java.util.ArrayList;


public class Test {
	
	
	
	int[] sequenz;
	int sequenzlaenge;
	SequenzbehaelterCollection sequenzbehaelterCollection;
	CorsiBloecke corsiBloecke;
	int[] eingabesequenzVP;
	boolean eingabeRichtig;
	Window window;
	VP vp;
	
	//Konstruktor
	public Test(int sequenzlaenge, CorsiBloecke corsiBloecke, Window window, VP vp){
		this.window=window;
		this.sequenzlaenge = sequenzlaenge;	
		this.corsiBloecke = corsiBloecke;
		this.vp = vp;
		eingabeRichtig = true; 

		
	}
	
	public boolean testDurchfuehren() throws InterruptedException{
		
		sequenzbehaelterCollection=vp.gibSequenzbehaelterCollection();
		sequenz = sequenzbehaelterCollection.gibSequenz(sequenzlaenge);
		
		for (int i=0; i<sequenz.length; i++){
			if (sequenz[i] == 1) {
				corsiBloecke.block1.aufblinken();
			}
		}
		
		int g=0;
		while (this.window.gebeEingabeBeendet() == false){
			g++;
			g--;
		}
		window.eingabeBeendetFalseSetzen();
		eingabesequenzVP = corsiBloecke.gibEingabesequenzVP();
		
		while (eingabeRichtig = true){
			for (int j=0; j<(eingabesequenzVP.length)-1; j++) {
			
				if (eingabesequenzVP[j] != sequenz[j]) {
					eingabeRichtig = false;
				}
			}
		}
		vp.AktualisiereSequenzbehaelterCollection(sequenzbehaelterCollection);
		return eingabeRichtig;
	}
		
		
			
}


Java:
import java.awt.Color;
import javax.swing.JButton;


public class CorsiQuadrat extends JButton {
	
	public CorsiQuadrat(String a) {
		this.setBackground(Color.BLUE);
		this.setText(a);	
	}
	
	
	//Quadrat gelb einfärben für eine Sekunde
	public void aufblinken() throws InterruptedException {
		this.setBackground(Color.YELLOW);
		Thread.sleep(1000);
		this.setBackground(Color.BLUE);
		Thread.sleep(1000);
	}
}
 
du hast keinen GUI-Code gepostet, vielleicht werden dort eigene andere Blöcke angezeigt

im main-Code
window = new Window();
corsiBloecke = new CorsiBloecke();
sieht es nicht so aus, als wären die beiden verknüpft
 
GUI-Code?

Ansonsten hattest Du recht....🙂.....es gab noch andere CorsiBloecke von einer älteren Programmversion die ich übersehen hatte. Strukturiere mein Programm derzeit nämlich völlig um, indem ich Objektvariablen nur noch über Methodenaufrufe verändere (anstatt wie bisher immer direkt!), dadurch wird es plötzlich 100 x einfach als bisher und weniger fehleranfällig!
🙂
 

Zurück
Oben