Hallo gemeinsam,
ich bin noch ein ziemlicher Java-Anfänger und habe auch in der Schule Informatik gewählt.
Dort haben wir jetzt die Aufgabe bekommen, einen Ampelwarteschlangensimulator zu programmieren,
was an sich eigentlich auch ganz gut geklappt hat.
Bis jetzt hat die Simulation immer automatisch begonnen, was ich allerdings änder wollte, allerdings gibt es dabei ein kleines Problem: Die beiden Buttons start und stop werden aus irgendwelchen Gründen
nicht angezeigt, wobei mir der Lehrer leider nicht helfen konnte.
Kann mir vielleicht einer von euch bei diesem Problem helfen?
Hier die paint()-Methode, die eigentlich fehlerfrei funktioniert:
Hier ist die Klasse Simulation, die anscheinend den Fehler verursacht:
Ich habe den beiden Buttons erstmal keine Events übergeben, das ich erstmal dafür sorgen wollte, dass sie angezeigt werden.
Danke an alle, die mir helfen wollen.:toll:
ich bin noch ein ziemlicher Java-Anfänger und habe auch in der Schule Informatik gewählt.
Dort haben wir jetzt die Aufgabe bekommen, einen Ampelwarteschlangensimulator zu programmieren,
was an sich eigentlich auch ganz gut geklappt hat.
Bis jetzt hat die Simulation immer automatisch begonnen, was ich allerdings änder wollte, allerdings gibt es dabei ein kleines Problem: Die beiden Buttons start und stop werden aus irgendwelchen Gründen
nicht angezeigt, wobei mir der Lehrer leider nicht helfen konnte.
Kann mir vielleicht einer von euch bei diesem Problem helfen?
Hier die paint()-Methode, die eigentlich fehlerfrei funktioniert:
Java:
import java.awt.*;
import javax.swing.*;
public class Anzeige extends JPanel{
public void paint(Graphics g){
//Farben/ Schrift
Color white = new Color(255, 255, 255);
Color black = new Color(0, 0, 0);
Font schrift = new Font("Arial",Font.BOLD,20);
//Anzeige der Strasse
g.setColor(black);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(white);
g.fillRect(1, getHeight()/2-100, getWidth()-2, 200);//Haupstrasse
g.fillRect(0, 0, 70, getHeight()); //Nebenstrasse
g.fillRect(0, getHeight()/2-110, 78, 218);
g.setColor(black);
g.fillOval(70, getHeight()/2-120, 15, 20); //Ecken abrunden
g.fillOval(70, getHeight()/2+100, 15, 20); //Ecken abrunden
g.setColor(Color.DARK_GRAY);
g.drawLine(80, getHeight()/2-100, 80, getHeight()/2+100); //Linie 1
g.drawLine(78, getHeight()/2-100, 78, getHeight()/2+100);
g.drawLine(1, getHeight()/2+110, 69, getHeight()/2+110); //Linie 2
g.drawLine(1, getHeight()/2+108, 69, getHeight()/2+108); //Linie 2
//Strassenstreifen zeichnen
int strassenstreifen = 80;
while(strassenstreifen < getWidth()){
g.setColor(black);
g.drawLine(strassenstreifen, getHeight()/2, strassenstreifen+50, getHeight()/2);
strassenstreifen = strassenstreifen + 100;
}
//Ausgbe der Werte
g.setColor(white);
g.setFont(schrift);
g.drawString("Stehende Autos: " + Simulation.stAutos, 100, 20);
g.drawString("Gesamtzahl der Autos: " + (int)Simulation.Autos, 100, 50);
//Ampel
g.setColor(Color.DARK_GRAY);
g.drawRect(getWidth()/2-25, getHeight()/2+150, 50, 100);
if(Simulation.Ampelanzeige.equals("Grün")){
g.setColor(Color.DARK_GRAY);
g.fillOval(getWidth()/2-20, getHeight()/2+157, 40, 40);
g.setColor(Color.green);
g.fillOval(getWidth()/2-20, getHeight()/2+203, 40, 40);
} else{
g.setColor(Color.red);
g.fillOval(getWidth()/2-20, getHeight()/2+157, 40, 40);
g.setColor(Color.DARK_GRAY);
g.fillOval(getWidth()/2-20, getHeight()/2+203, 40, 40);
}
//Autos
int anzahl = Simulation.stAutos;
int ort = 100;
for(int i=1; i<=anzahl; i++){
g.setColor(Simulation.auto);
g.fillRect(ort, getHeight()/2-60, 40, 20);
g.setColor(Color.yellow);
g.drawString("T", ort+12, getHeight()/2-42);
g.setColor(black);
g.fillOval(ort+5, getHeight()/2-45, 10, 10);
g.fillOval(ort+25, getHeight()/2-45, 10, 10);
ort = ort + 50;
}
}
}
Hier ist die Klasse Simulation, die anscheinend den Fehler verursacht:
Java:
import java.awt.*;
import javax.swing.*;
public class Simulation {
static int stAutos = 0;
static float Autos = 0;
static int schleife = 1;
int zufall;
//Ampelwerte
static int Ampelfarbe = 1; //0 = Rot, 1 = Grün
static String Ampelanzeige ="rot";
static Anzeige a = new Anzeige();
//Farbe des Autos festlegen
static int rot = (int)(Math.random()*256);
static int grün = (int)(Math.random()*256);
static int blau = (int)(Math.random()*256);
static Color auto = new Color(rot, grün, blau);
//Frame erstellen
static JFrame frame = new JFrame();
static Simulation simu = new Simulation();
static //Panel für Start und Stop
JPanel panel = new JPanel();
public static void main(String[]args){
//Frame einstellen
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocation(150, 150);
frame.setSize(1300, 600);
frame.add(BorderLayout.CENTER,a);
frame.setVisible(true);
//Panel für Start und Stop
panel.setLocation(Simulation.frame.getWidth()/2, 0);
//Startbutton
JButton start = new JButton("Start");
panel.add(start);
panel.setSize(250, 100);
start.setBounds(0,0,100,100);
panel.add(start);
//Startbutton
JButton stop = new JButton("Stop");
panel.add(BorderLayout.NORTH,stop);
stop.setBounds(150,0,100,100);
//Panel dem Frame hinzufügen
Simulation.frame.add(panel);
taktgeber();
}
private static void taktgeber() {
//Für jede Minute ein Strassendurchlauf
while(schleife<1250){
simu.auto();
simu.ausgabe();
schleife++;
a.repaint();
}
simu.endausgabe();
}
public static void ampel(){
final int fahrendeAutos = 8;
if(Ampelfarbe == 0){ //Rot
Ampelfarbe = 1;
Ampelanzeige = "Rot";
}else{ //Grün
Ampelfarbe = 0;
Ampelanzeige = "Grün";
stAutos = stAutos - fahrendeAutos; //8 Autos fahren weg
if(stAutos<=0){ //Wenn stAutos < 0 stAutos auf 0 setzen
stAutos = 0;
rot = (int)(Math.random()*256);
grün = (int)(Math.random()*256);
blau = (int)(Math.random()*256);
auto = new Color(rot, grün, blau);
}
a.repaint();
}
}
public void auto(){
//Zufallszahl ermitteln
zufall = (int)(Math.random() * 6+1);
//Zeit ermitteln
long zeit = (long)(10/zufall)*1000;
//Anzahl Autos erhöhen
for(int i = 1; i<=zufall; i++){
try {
Thread.sleep(zeit);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//aktualisieren
a.repaint();
stAutos++;
Autos++;
try {
Thread.sleep(zeit);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//aktualisieren
a.repaint();
}
//Ampel an/aus schalten
ampel();
}
public void ausgabe(){
//Ausgabe nach jeder Minute
System.out.println("Ampel: " + Ampelanzeige);
System.out.println("Kommende Autos: " + zufall);
System.out.println("Anzahl derAutos nach " + schleife + " Minuten: " + stAutos);
}
public void endausgabe(){
//Durchschnitt an kommenden Autos die Minute
float durchschnitt = (float)( Autos / 1520);
//Endausgabe
System.out.println("------------------------------------------------------------------------------------------");
System.out.println("------------------------------------------------------------------------------------------");
System.out.println("Gesamtzahl der Autos am heutigen Tag: " + Autos);
System.out.println("Durchschnittliche Anzahl ankommender Autos die Minute: " + durchschnitt);
System.out.println();
}
}
Ich habe den beiden Buttons erstmal keine Events übergeben, das ich erstmal dafür sorgen wollte, dass sie angezeigt werden.
Danke an alle, die mir helfen wollen.:toll: