# BlueJ Problem



## Marvin26 (15. Sep 2010)

Hallo zusammen,

erst einmal hoffe ich das ich im richtigen Forum gelandet bin, sonst bitte ich dies zu entschuldigen.
Mein Problem ist glaube ich kein großes, ich bekomme es jedoch nicht bewältigt, auch nicht mit Google oder der Forum Suche 
Also, ich will ein Auto zeichnen und jenes von der linken zur rechten Seite bewegen, also "fahren" lassen. Das Grundsystem hab
ich vorher schon bei einem Sonnenuntergang hinbekommen. Nun kommt aber das eigentlich logische Problem: Die einzelnen Teile
des Autos (Kreise (Räder), Quadrate (Auto)) bewegen sich einzeln und alle nach der Reihe, sie sollen dies aber gleichzeitig machen.
Gibt es eine Lösung zum Problem?

Hier mein Quelltext:


```
public void autofahren()
    {
        if(wand != null)   // nur wenn schon gezeichnet wurde ...
        {
            auto1.langsamHorizontalBewegen(200);
            auto2.langsamHorizontalBewegen(200);
            auto3.langsamHorizontalBewegen(200);
            rad1.langsamHorizontalBewegen(200);
            rad2.langsamHorizontalBewegen(200);
        }
    }
}
```

Hoffe ich habe an alles gedacht, danke im Voraus =)


----------



## Tomate_Salat (15. Sep 2010)

Dein Problem ist: er führt diese Methoden nacheinander aus. Ich würde die Autos auch nicht aufteilen in Auto+Rad, sondern würde beide Teile verbinden. Wenn du mehrere Autos nebeneinander fahren lassen willst, solltest du dich mal mit Multithreading auseinander setzen

MFG

Tomate_Salat


----------



## pl4gu33 (15. Sep 2010)

evtl. eine Oberklassen, die die einzelnen Komponenten beinhaltet,... und dann kannst du z.b.

neueKlasse.langsamHorizontalBewegen(200);

würde ich jetzt dran denken,...
und diese Klasse enthälft dann auto1-3 und rad1-2 als Attribute z.b.

also Beispiel alle Komponenten auf einer Panelklasse positionieren,... und diese dann einfach mit "langsamHorizontalBewegen(200)" bewegen


----------



## Marvin26 (15. Sep 2010)

Danke schon einmal für die schnellen und guten Antworten.
Das Grundprinzip zur Lösung habe ich verstanden. Allerdings sind die Ausdrücke Panelklasse etc. für einen absoluten Neuling der sich
noch reinarbeiten möchte nicht allzu verständlich =)
Habe jetzt einiges ausprobiert, bekam aber immer Fehlermeldungen. Also meine neue Frage, wie und vorallem wo erstelle ich die
neue Klasse?


----------



## pl4gu33 (15. Sep 2010)

mm auf was hast du denn gerade die Teile geaddet direkt auf dem Frame oder auf nem Panel ?... vielleicht könntest du mal kurz deine gesamte Klasse posten,... dass man da vielleicht etwas mehr Überblick hat, dann wärs etwas einfacher dir das zu erklären, weil ich denke es würde auch erstmal nur eine einfacher Lösung geben als direkt ne neue Klasse,obwohl dies wohl das Beste wäre  darum würde ich gern den ganzen Code sehen


----------



## Marvin26 (15. Sep 2010)

Her der gesamte Code:


```
public class Zeichnung
{
    private Quadrat wand;
    private Quadrat fenster;
    private Dreieck dach;
    private Kreis sonne;
    private Quadrat schornstein;
    private Quadrat tuer1;
    private Quadrat tuer2;
    private Quadrat auto1;
    private Quadrat auto2;
    private Quadrat auto3;
    private Kreis rad1;
    private Kreis rad2;
    
    /**
     * Erzeuge ein Exemplar der Klasse Zeichnung
     */
    public Zeichnung()
    {
        // nichts zu tun hier, alle Exemplarvariablen werden automatisch
        // mit null initialisiert.
    }

    /**
     * Zeichne die Zeichnung.
     */
    public void zeichne()
    {
        wand = new Quadrat();
        wand.vertikalBewegen(80);
        wand.groesseAendern(100);
        wand.sichtbarMachen();
        
        fenster = new Quadrat();
        fenster.farbeAendern("schwarz");
        fenster.horizontalBewegen(20);
        fenster.vertikalBewegen(100);
        fenster.sichtbarMachen();
        
        schornstein = new Quadrat();
        schornstein.farbeAendern("blau");
        schornstein.horizontalBewegen(75);
        schornstein.vertikalBewegen(52);
        schornstein.groesseAendern(25);
        schornstein.sichtbarMachen();
        
        dach = new Dreieck();  
        dach.groesseAendern(50, 140);
        dach.horizontalBewegen(60);
        dach.vertikalBewegen(70);
        dach.sichtbarMachen();

        sonne = new Kreis();
        sonne.farbeAendern("gelb");
        sonne.horizontalBewegen(180);
        sonne.vertikalBewegen(-10);
        sonne.groesseAendern(60);
        sonne.sichtbarMachen();
        
        tuer1 = new Quadrat();
        tuer1.farbeAendern("schwarz");
        tuer1.horizontalBewegen(55);
        tuer1.vertikalBewegen(140);
        tuer1.groesseAendern(30);
        tuer1.sichtbarMachen();
        
        tuer2 = new Quadrat();
        tuer2.farbeAendern("schwarz");
        tuer2.horizontalBewegen(55);
        tuer2.vertikalBewegen(150);
        tuer2.groesseAendern(30);
        tuer2.sichtbarMachen();
        
        auto1 = new Quadrat();
        auto1.farbeAendern("schwarz");
        auto1.horizontalBewegen(-30);
        auto1.vertikalBewegen(200);
        auto1.groesseAendern(30);
        auto1.sichtbarMachen();

        auto2 = new Quadrat();
        auto2.farbeAendern("schwarz");
        auto2.horizontalBewegen(-15);
        auto2.vertikalBewegen(200);
        auto2.groesseAendern(30);
        auto2.sichtbarMachen();
        
        auto3 = new Quadrat();
        auto3.farbeAendern("schwarz");
        auto3.horizontalBewegen(5);
        auto3.vertikalBewegen(210);
        auto3.groesseAendern(20);
        auto3.sichtbarMachen();
        
        rad1 = new Kreis();
        rad1.farbeAendern("schwarz");
        rad1.horizontalBewegen(9);
        rad1.vertikalBewegen(218);
        rad1.groesseAendern(15);
        rad1.sichtbarMachen();
        
        rad2 = new Kreis();
        rad2.farbeAendern("schwarz");
        rad2.horizontalBewegen(50);
        rad2.vertikalBewegen(218);
        rad2.groesseAendern(15);
        rad2.sichtbarMachen();
        
    }

    /**
     * Ändere die Darstellung in schwarz-weiß.
     */
    public void inSchwarzWeissAendern()
    {
        if(wand != null)   // nur wenn schon gezeichnet wurde ...
        {
            wand.farbeAendern("schwarz");
            fenster.farbeAendern("weiss");
            dach.farbeAendern("schwarz");
            sonne.farbeAendern("schwarz");
        }
    }

    /**
     * Ändere die Darstellung in Farbe.
     */
    public void inFarbeAendern()
    {
        if(wand != null)   // nur wenn schon gezeichnet wurde ...
        {
            wand.farbeAendern("rot");
            fenster.farbeAendern("schwarz");
            dach.farbeAendern("gruen");
            sonne.farbeAendern("gelb");
        }
    }
    
    public void lichtAn()
    {
        if(wand != null)   // nur wenn schon gezeichnet wurde ...
        {
            fenster.farbeAendern("gelb");
        }
    }
    
        public void lichtAus()
    {
        if(wand != null)   // nur wenn schon gezeichnet wurde ...
        {
            fenster.farbeAendern("schwarz");
        }
    }
    
    public void sonnenuntergang()
    {
        if(wand != null)   // nur wenn schon gezeichnet wurde ...
        {
            sonne.langsamVertikalBewegen(100);
            sonne.farbeAendern("rot");
        }
    }
    
        public void sonnenaufgang()
    {
        if(wand != null)   // nur wenn schon gezeichnet wurde ...
        {
            sonne.langsamVertikalBewegen(-100);
            sonne.farbeAendern("gelb");
        }
    }
    
            public void autofahren()
    {
        if(wand != null)   // nur wenn schon gezeichnet wurde ...
        {
            auto1.langsamHorizontalBewegen(200);
            auto2.langsamHorizontalBewegen(200);
            auto3.langsamHorizontalBewegen(200);
            rad1.langsamHorizontalBewegen(200);
            rad2.langsamHorizontalBewegen(200);
        }
    }
}
```


----------



## pl4gu33 (15. Sep 2010)

mm irgendwie sieht das komisch aus, ich muss dazu sagen, ich hab mich noch niee mit BlueJ befasst/gearbeitet und hatte jetzt eigentl. etwas anderes erwartet aber nunja^^

hast du zufällig auch die Klassen Quadrat,Dreieck etc.
ich befürchte, dass dies nicht der Fall ist und BlueJ die einfach nur so stellt zum Üben und Lernen,...


----------

