Erste Schritte Java - Applet - Rechteck ständig versetzen

shareking

Mitglied
Hallo Zusammen, ich bin gerade dabei ein Java - Applet zu erstellen und zwar mit einem Rechteck. Die Erstellung klappt soweit ganz gut, nun möchte ich das sich das Rechteck in Position X & Y um z.B. 2px verändert. und das ganze solange bis ich 50 Rechtecke erstellt habe.

Ich weiß das ich das z.B. in einer FOR - Schleife lösen könnte nur weiß ich nicht genau wie ich sowas umsetzen kann oder soll und wieso es dann ausgerechnet an der Stelle stehen muss.

RechteckApplet.java
Java:
public class RechteckApplet extends java.applet.Applet {

    private Rechteck rechteck1;

   
    public void init() {
        rechteck1 = new Rechteck(10, 10, 100, 150);

    }
   
    public void paint(java.awt.Graphics g) {
        rechteck1.zeichne(g);
        rechteck1.bewege(4,4);
        rechteck1.zeichne(g);
        rechteck1.zeichne(g);
        rechteck1.bewege(4,4);
        rechteck1.zeichne(g);
        rechteck1.bewege(4,4);
        rechteck1.zeichne(g);
        rechteck1.bewege(4,4);
        rechteck1.zeichne(g);
        rechteck1.zeichne(g);
        rechteck1.bewege(4,4);
        rechteck1.zeichne(g);
        rechteck1.bewege(4,4);
        rechteck1.zeichne(g);
        rechteck1.bewege(4,4);
        rechteck1.zeichne(g);
        rechteck1.zeichne(g);
        rechteck1.bewege(4,4);
        rechteck1.zeichne(g);
        rechteck1.bewege(4,4);
       
    }
}

Rechteck.java

Java:
public class Rechteck extends Object {
   
    protected int x;
    protected int y;
   
    public int getX() {
        return x;
    }
   
    public void setX(int x) {
        this.x = x;
    }
   
    public int getY() {
        return y;
    }
   
    public void setY(int y) {
        this.y = y;
    }

   
   
    private int hoehe;
    private int breite;
   
    public Rechteck(int x, int y, int hoehe, int breite) {
        this.x = x;
        this.y = y;
        this.hoehe = hoehe;
        this.breite = breite;
    }
   
    public Rechteck() {
        this(10, 10, 60, 90);
    }
   
    public int getHoehe() {
        return hoehe;
    }
   
    public void setHoehe(int hoehe) {
        this.hoehe = hoehe;
    }
   
    public int getBreite() {
        return breite;
    }
   
    public void setBreite(int breite) {
        this.breite = breite;
    }
   
    public double getUmfang() {
        return 2 * hoehe + 2 * breite;
    }
   
    public double getFlaeche() {
        return hoehe * breite;
    }
   
    public void zeichne(java.awt.Graphics g) {
        g.drawRect(x, y, breite, hoehe);
    }
   
    public void skaliere(int delta) {
        x += delta;
        y += delta;
    }
   
        public void bewege(int deltaX, int deltaY) {
        x += deltaX;
        y += deltaY;
    }
}

Im ersten Code (RechteckApplet.java) habe ich in der Graphics immer wieder das Viereck versetzt was irgendwie zur Lösung führt aber unsauber geschrieben aussieht. ich würde es lieber per Schleife versetzen lassen. Nur stehe ich total auf dem Schlauch wie das realisiert werden muss. 🙁 Ich hoffe ihr könnt mir erklären wo so eine For schleife reinmüsste und wieso genau da.
 
Du brauchst eine Schleife, welche Dir mehrmals (50 mal in Deinem Beispiel) das Rechteck bewegt und anschließend zeichnet.
Die einzige Funktion, welche sich bei Dir für diese Schleife anbietet, wäre bei Dir die "paint()"-Funktion.
Ich würde mir eine Liste für die Rechtecken anlegen, dann kann man sie an anderer Stelle auch noch weiterverwenden, falls Du z.B. noch diverse Operationen damit durchführen willst (das Zeichnen und die Logik aufteilen meine ich).

Gruß,
Schmetterhand
 
Guten Morgen, so habe ich mir das auch gedacht, jedoch weiß ich nicht wie das ganze Umgesetzt werden muss /soll. und wo ich den Code anpassen soll?! :/
 
Hier zum Beispiel könntest du eine benutzen 😉

rechteck1.zeichne(g);
rechteck1.bewege(4,4);
rechteck1.zeichne(g);
rechteck1.zeichne(g);
rechteck1.bewege(4,4);
rechteck1.zeichne(g);
rechteck1.bewege(4,4);
rechteck1.zeichne(g);
rechteck1.bewege(4,4);
rechteck1.zeichne(g);
rechteck1.zeichne(g);
rechteck1.bewege(4,4);
rechteck1.zeichne(g);
rechteck1.bewege(4,4);
rechteck1.zeichne(g);
rechteck1.bewege(4,4);
rechteck1.zeichne(g);
rechteck1.zeichne(g);
rechteck1.bewege(4,4);
rechteck1.zeichne(g);
rechteck1.bewege(4,4);

würde dann so aussehen:
Java:
    for (int i = 0; i < 50; i++) {
      rechteck1.zeichne(g);
      rechteck1.bewege(4,4);
      rechteck1.zeichne(g);
    }
also wenn du das ganze 50 mal machen willst 😀
wenn nicht, dann must du die 50 anpassen...

Weißt du denn, wie eine For-Schleife funktioniert?
 
Aber ich müsste doch irgendwo im Code das "int i" definieren oder?

Würde das hier einfügen?!

Java:
public class RechteckApplet extends java.applet.Applet {

     private Rechteck rechteck1;

   
     public void init() {
         rechteck1 = new Rechteck(10, 10, 100, 150);

     }
   
     public void paint(java.awt.Graphics g) {

  for (int i = 0; i < 50; i++) {
       rechteck1.zeichne(g);
       rechteck1.bewege(4,4);
       rechteck1.zeichne(g);
     }
       
     }
}

Wäre das denn so richtig? Aber muss das int i nicht irgendwo in meine "bewege Methode " rein?
 
Ich weiß ehrlich gesagt noch nicht so ganz was du machen willlst 😀
Aber so wie deine Bewegen-Methode aussieht, müsstest du durch die 4,4 das ganz auch schräg nach oben, oder unten (Weiß nicht wie das bei Applets ist) bewegen können. Wie viel das sein soll musst du selber sagen 😀
 
Ja danke für deine Hilfe so wollte ich das auch das es zu einem rechteckrohr wird. Ich habe irgendwie gedacht das dieses int i irgendwo im Programm noch erwähnt werden muss deshalb hatte ich meine Schwierigkeiten:/ ... Eine Frage habe ich da noch. Wieso verschwindet das Rohr wenn ich das Fenster des Applets vergrößer oder verkleinern?
 
Weil du das ganze nur verschiebst, du zeichnest die Rechtecke nicht neu 😀

Correct müsste das ganze also so aussehen
Java:
for (int i = 0; i < 50; i++) {
      Rechteck rechteck = new Rechteck(i * 4, i * 4, 100, 150);
      rechteck.zeichne(g);
}
 
Okay, aber ich habe ja eigentlich extra die Rechteck.bewege Methode dafür erstellt, damit ich sie dort auch einbinden kann. Erstellt er mit deinem neuen code jedes mal ein neuen kreis oder nur einmal und verschiebt es dann so wie es bei meinem code bereits der fall war?
 
Ja meint ich doch 😀 aber benötige ich das denn das er jedesmal ein neues Rechteck erstellt? es reicht doch auch einfach die normale Schleife versetzen zu lassen oder? Was ist denn Programmiertechnisch "richtiger" oder muss man es immer auf den Verwendungszweck beziehen?
 
Ja, theoretisch reicht es, aber eigentlich ist das Rechteck dann ja nur an der Stelle, wo du es als letztes hingeschoben hast.
Und wollen willst du ja überall unterwegs auch rechtecke oder?
 
Ganz genau, eigentlich soll jedes mal ein neues Rechteck erstellt werden. Deshalb ist die zweite Variante von dir "richtiger" korrekt?Und dann dürfte das Applet doch auch beim Vergrößern was anzeigen oder? Oder muss ich hierfür noch was zusätzliches in den Code schreiben?!
 

Zurück
Oben