Kreuzung Projekt

kenny01

Mitglied
Hallo,

ich habe für die Schule ein Projekt erstellt. Ich habe mir dabei überlegt ein Kreuzung mit Autos zu machen. Die Ampeln kann man entweder auf grün, gelb oder rot stellen und je nachdem halten dann die Autos an der Ampel an.

Ich muss dazu aber auch sagen, dass Informatik in der Schule auch nicht mein Hauptfach ist und wir bisher noch nicht so viel gelernt haben, dementsprechend sieht dann auch mein Projekt / Quellcode wie der eines Anfängers aus, also bitte nicht wundern.

Mein Problem ist, dass wenn ich das Applet starte und auf den "Start" Button klicke, dann werden die Ampeln nicht gemalt. Erst wenn ich auch einen Button "rot" "grün" oder "gelb" klicke, werden sie angezeigt.

Ein weiteres Problem ist, dass zwar meine Autos angezeigt werden, wenn ich jedoch möchte, dass eines der Autos anhält, weil die Ampel auf Rot geschaltet ist, dass dann das Bild des Autos plötzlich verschwindet und nur noch das Panel, auf das ich das Auto zeichne angezeigt wird. (Am besten einfach mal selbst ausprobieren!)

Ich wäre euch wirklich dankbar wenn ihr mir helfen könntet.

Ich habe das ganze mal in einer Zip-Datei gespeichert, in der dann auch die Bilder der Autos usw. ist:

File-Upload.net - Ampelprojekt.zip (auf den kleinen Download-Button drücken)

Gruß kenny01
 

Andi_CH

Top Contributor
Hm, ich und Webtechnologien - gibt es eine Möglichkeit dieses Applet auch ohne Webserver zu starten?
Einfach mit einem lokalen html-File?

Weil so einfach ist das nicht ;-)

(Ja
Code:
package com.javaforum.kreuzung;
ist in den Files eingetragen und die liegen auch an der richtigen Stelle :) )

Code:
<html>
  <head>
    <title>Kreuzung</title>
  </head>
  <body>
    <p>Inhalt der Webseite</p>
    <applet code="com.javaforum.kreuzung.AmpelApp.class" width=350 height=350></applet>
    <applet code="C:/dvlp/Versuche/bin/com/javaforum/kreuzung/AmpelApp.class" width=350 height=350></applet>
    <applet code="/dvlp/Versuche/bin/com/javaforum/kreuzung/AmpelApp.class" width=350 height=350></applet>
  </body>
</html>
 
Zuletzt bearbeitet:

kenny01

Mitglied
Öffne doch einfach die AmpelApp.java mit dem Java-Editor und starte das Applet ;-)

Hmmm, ich hab gestern nochmal Einiges ausprobiert, aber leider klappt es immer noch nicht :(
 

Marco13

Top Contributor
ALLES, was gezeichnet werden soll, muss von der paint-Methode aus gezeichnet werden. Man sollte auf einer Component i.A. NICHT "getGraphics" aufrufen.

Der Code ist insgesamt ... naja, nicht so schön halt, aber ... hmmm... wenn man das jetzt mit vertretbarem Aufwand umstricken sollte... Eine Möglichkeit wäre wohl, dass die "Ampelpanel"s nicht nur Panels sind, sondern spezielle
Code:
class AmpelZeichenPanel extends Panel
{
    private Ampel ampel; // Wird im Konstruktor übergeben
    ..

    public void paint(Graphics g)
    {
        super.paint(g);
        ampel.maleAktuellenZustandIn(g);
    }
}

Die Ampel-Klasse würde dann bei den ganzen Methoden wie
public void set_gelb2(Graphics g){
KEIN Graphics mehr übergeben bekommen, sondern nur die Lampen ein- und ausschalten, und bei der neu eingeführten Methode "maleAktuellenZustandIn(Graphics g)" die drei Lampen jeweils mit "male_Lampe" in das übergebene Graphics-Objekt zeichnen.

Warum den AmpelPanels bei den setBounds-Aufrufen eine Größe von 0,0 gegeben wird, ist mir nicht ganz klar - das sollte wohl auch nicht so sein...

Das mit der "Automatik" muss dann noch ein bißchen angepasst werden....
 

kenny01

Mitglied
ok danke mal Marco13... werds mal versuchen mit der Ampel...

hat aber jemand noch eine Idee zu dem Problem, dass das Auto nicht mehr angezeigt wird, sobald es an der roten Ampel anhält?
 

Marco13

Top Contributor
Ohne diesen spezifischen Punkt jetzt nachvollzogen zu haben: Wenn hier jemand einen Thread eröffnet, bei dem irgendwas wie "Problem beim Zeichnen" oder so drin vorkommt, suche ich mit STRG+F erstmal nach "getGraphics", und wenn es im Code vorkommt und auf einer Component aufgerufen wird, kommt die (lapidare, weil immer gleiche) Antwort: Sieh' zu, dass du das wegbekommst. getGraphics auf einer Component ist nahezu immer falsch, und bewirkt beliebig häßliche Zeichen-Fehler...
 

Neue Themen


Oben