Gui und Loop

Status
Nicht offen für weitere Antworten.

pnim

Mitglied
Hallo,

ich habe eine kleine gui

Java:
import java.awt.*;
import java.applet.*;


public class a extends java.applet.Applet  
{
	public void init()
	{
		setLayout(null);
		setBackground(new java.awt.Color(224,224,224));
		setSize( 300, 200 ); 
		
		Kasten.setLayout(null);
		add(Kasten);
		Kasten.setBackground(java.awt.Color.lightGray);
		Kasten.setBounds(5,5,100,100);
	}
	
	java.awt.Panel Kasten= new java.awt.Panel();

  public void Rot() {
   Kasten.setBackground(Color.RED);
  }

  public void Blau() {
   Kasten.setBackground(Color.BLUE);
  }

}

Nun möchte ich von einer andern klasse aus von einem Loop aus diese Gui verändern, das heißt ich rufe

for (int i = 0; i < 10; i++) {
a.Rot();
Wait.manySec(1);
a.Blau();
}



aus einer andern Klasse aus auf. Das funktioniert aber leider nicht so ganz.
Ich vermutete die Gui muss irgendwie Refresht bzw geupdatet werden oder?
 
Zuletzt bearbeitet:

Schandro

Top Contributor
warum funktioniert es "nicht so ganz" ?


Off Topic:
Variablen und Methodennamen schreibt man im camelCase (d.h. erster Buchstabe klein)
Klassennamen im CamelCase (d.h. 1. Buchstabe groß)

außerdem sollten Methodennamen immer mit einem verb beginnen, dass macht den Code leichter verständlich für andere / für einen selber.

Achso, wenn du eh java.applet.* importierst brauchst du eigentlich nicht mehr java.applet.Applet innerhalb des Sourcecodes schreiben sondern nurnoch "Applet".

Übrigens ist Swing neuer/besser als AWT, kannst dir ja überlegen ob du darauf umsteigst.
 

pnim

Mitglied
nunja was nicht funktioniert ist:

das währendem loop die gui nur lädt und sobald der loop fertig ist wird erst das gui richtig angezeigt... mir natürlich nur der letzten änderung also "Blau".
 

Schandro

Top Contributor
wahrscheinlich steht der loop in irgendeinem Action/Key/whatever Listener.
Dadurch wird er im Event Dispatcher Thread (EDT) ausgeführt
innerhalb des EDT wird aber auch die GUI gemalt.
Deswegen blockiert sich das gegenseitig.
Wenn in der Schleife was ganz schnelles passieren würde wär das kein Problem. Es funktioniert aber nicht wenn du Thread.sleep aufrufst, während dieser "Schalfenszeit" wird sich die GUI nämlich nicht verändern können weil der EDT ja schlafengelegt ist.

=> Du musst die Schleife in einem extra Thread ausführen.
 

pnim

Mitglied
hmm also die sache ist die
ich möchte eine Ampelsimulation machen

dazu habe ich folgende Klassen:

Lamp.java // mit State off oder on
TrafficLight.java // Erzeugt 3 neue Lampen Objekte (State off, red, redyellow, yellow, green)
System.java // (State WestOst-Phase und NordSüd-Phase)
Welches 2 neue TrafficLights erstellt und diese immer abwechselnd durch schaltet und zwar über eine "Advance" Prozedur und über switch wird dann die phase gewechselt je nach dem was eben gerade war.

Simulation.java // erstellt ein neues Systemobjekt und schaltet es ein und ruft über einen loop die Advance Prozedur 10 mal auf um eben eine weile die Simulation laufen zulassen.

Wait.java (nur warte funktion drin)

Per Textausgabe funktioniert das ganze sehr gut.
Nur würde ich gerne das über ein Gui machen.

Vlt. hab ich au schon mit meinem ersten Gui versuch falsch angefangen.
Ich könnte ein Tip gebrauchen wie ich am besten an fange das ding in eine Gui zupacken.
Es reicht wenn 2 Ampeln zusehen sind mehr nicht.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben