Ampel

Status
Nicht offen für weitere Antworten.

ChrisG

Mitglied
Hallo zusammen,
ich bastle gerade an einer Hausaufgabe und komme nicht weiter.

Es soll eine Ampelsteuerung werden. Also drei Kreise und darunter ein Button.
Bei mir ist es aber so, daß das Panel mit den Kreis zwar zu sehen ist, aber nicht die Kreise selber.
Was nache ich hier falsch, daß die Kreis nicht angezeigt werden ????

Ich poste mal, was ich bisher verzapft habe :


Code:
package Ampel;

import java.awt.*;
import java.awt.event.*;

public class BaseFrame extends Frame{
	
	BaseFrame(){
		addWindowListener( new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});
		setSize(150,300);
		setLocation(100,10);
	}
}



package Ampel;

import java.awt.*;
import java.awt.event.*;

public class DoButton extends Button{

	public DoButton(String s){
		super(s);
		addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				doAction();
			}
		});
	}
	
	public void doAction(){	
	}
}



package Ampel;

import java.awt.*;
import java.awt.event.*;

class Lights extends Canvas { 
	
	private Color red;
	private Color yellow;
	private Color green;
	
	
	Lights (Color r, Color y, Color g){
		red = r;
		yellow = y;
		green = g;
	}
  
	public void paint(Graphics g){ 
		g.setColor(red); g.fillOval(30, 5, 60, 60);
		g.setColor(yellow); g.fillOval(30, 65, 60, 60);		
		g.setColor(green); g.fillOval(30, 125, 60, 60);
	}
}



package Ampel;

import java.awt.*;
import java.awt.event.*;

class Traffic {

	public static void main (String[] args){

		TrafficLight t = new TrafficLight();
    	}	
}




public class TrafficLight extends  WindowAdapter implements ActionListener{ 
	
	private Lights lights;
	private DoButton changeLight; 
	
	public TrafficLight (){
		
	//	Panel für die Funktionstaste
		Panel functionPanel = new Panel();
		functionPanel.setLayout(new FlowLayout());
		functionPanel.setBackground(Color.green);
	
	//	Panel für die Lichter
		Panel lightPanel = new Panel();
		lightPanel.setLayout(new FlowLayout());
		lightPanel.setBackground(Color.black);
		lights = new Lights (Color.gray, Color.gray, Color.gray);	
		lightPanel.add(lights);
		lightPanel.setVisible(true);
		lightPanel.repaint();
			
		
		changeLight = new DoButton("Switch");			
		functionPanel.add(changeLight);
		functionPanel.setVisible(true);
	


		//	Hauptfenster erstellen		
		Frame ampelFrame = new BaseFrame();
		
		ampelFrame.add(lightPanel);	
		ampelFrame.repaint();		
		ampelFrame.add(functionPanel,BorderLayout.SOUTH);
		ampelFrame.repaint();
		ampelFrame.setVisible(true);
		ampelFrame.repaint();		
		
  }
	
	public void actionPerformed(ActionEvent evt){

	}	
}



Danke schon mal
Gruß Christoph
 
S

SlaterB

Gast
repaint() musst du gar nicht aufrufen, setVisible(true); einmal ganz am Ende für Frame, das reicht,

dein Lights-Canvas ist nicht zu sehen, weil es Höhe und Breite 0 oder 1 hat, jedenfalls sehr sehr klein,

da hilft entweder ein anderes Layout im lightsPanel, z.B.
lightPanel.setLayout(new BorderLayout());

oder eine Größenangabe für lights:
lights.setPreferredSize(new Dimension(100,300));
 

ChrisG

Mitglied
Danke erst mal für die schnelle Hilfe !!!

Ich habe die Zeile 100 :

lightPanel.setLayout(new FlowLayout());

ersetzt durch :
lightPanel.setLayout(new BorderLayout());

und es kappte.

Nur noch mal zum Verständnis für mich. Was ist der Unterschied zwischen den beiden Befehlen.
Warum, bewirkt BorderLayout daß ich die Kreise sehe, bzw. die Fläche nun groß genug ist?

Gruß Christoph
 
S

SlaterB

Gast
weil BorderLayout eben bedeutet, dass die enthaltene Komponente maximiert dargestellt wird,
FlowLayout geht dagegen anders vor, stellt Komponenten nur nach ihrer PreferredSize dar,
da ist nix groß interessantes dabei, keine Logik, muss man nur wissen/ nachlesen/ ausprobieren
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben