[JAVA] Bild per Rekursion malen, leider falschrum

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von jojo2peter, 25. Oktober 2014 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 25. Oktober 2014
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    Hallo RR,

    folgendes soll programmiert werden (Übung für Rekursion):
    Spoiler
    Bild

    mein Code dafür sieht so(Pastebin) aus:
    Spoiler
    Code:
    import javax.swing.JFrame;import java.awt.Graphics;
    import javax.swing.JPanel;
    import java.awt.Color;
    
    
    
    
    public class fraktal extends JPanel{
     
     public fraktal(){
     super();
     }
     
     
     public boolean drawQuader(Graphics g, int x, int y, int width, int height, int n){
     
     if ( n == 4){g.setColor(Color.RED);}
     if ( n == 3){g.setColor(Color.BLUE);}
     if ( n == 2){g.setColor(Color.CYAN);}
     if ( n == 1){g.setColor(Color.ORANGE);}
     if ( n == 0){g.setColor(Color.PINK);}
     
     g.fillRect(x,y,width,height);
     
     if (n == 0){
     return true;
     }
     else { 
     drawQuader(g,x-width/4,y-height/4,width/2,height/2,n-1);
     drawQuader(g,(x+width)-width/4,(y+height)-width/4,width/2,height/2,n-1);
     drawQuader(g,(x+width)-width/4,y-width/4, width/2, height/2, n-1);
     drawQuader(g,x-width/4,(y+width)-width/4, width/2, height/2, n-1);
     return true;
     }
     
     }
     
     public void paintComponent(Graphics g){
     super.paintComponent(g);
     drawQuader(g, 150, 150, 250, 250, 4);
     
     }
     public static void main(String[] args) {
     fraktal panel = new fraktal(); 
     JFrame application = new JFrame();
     
     
     application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     application.add(panel); 
     application.setSize(600, 600);
     application.setVisible(true); 
     application.setTitle("Fraktal");
    
    
     }
    }

    Der Fehler ist, dass zuerst das große Quadrat gezeichnet wird, dann darüberliegend die anderen.
    Das war zu Beginn auch so beabsichtigt, da ich dachte es gäbe eine leichte Methode Ebenen zu erzeugen.
    Gibt es nicht eine Möglichkeit, wie bei LayeredPane, einfach eine gemalte Ebene mit einer Zahl zu versehen (0) für Top?


    Für die, die es nicht compilen wollen, so sieht es derzeit aus :S:
    Bild
     
  2. 25. Oktober 2014
    AW: [JAVA] Bild per Rekursion malen, leider falschrum

    Du startest mit 4 (Rot), dann 3 (Blau), dann 2 (Cyan), dann 1 (Orange) und zuletzt 0 (Pink).
    Doch du malst direkt anstatt zunächst per Rekursion die anderen Quadrate zu malen.

    Ich denke du wolltest auf das hier hinaus:

    Code:
     public boolean drawQuader(Graphics g, int x, int y, int width, int height, int n) {
     if (n > 0) {
     drawQuader(g, x - width / 4, y - height / 4, width / 2, height / 2, n - 1);
     drawQuader(g, (x + width) - width / 4, (y + height) - width / 4, width / 2, height / 2, n - 1);
     drawQuader(g, (x + width) - width / 4, y - width / 4, width / 2, height / 2, n - 1);
     drawQuader(g, x - width / 4, (y + width) - width / 4, width / 2, height / 2, n - 1);
     }
    
     if (n == 4) {
     g.setColor(Color.RED);
     }
     if (n == 3) {
     g.setColor(Color.BLUE);
     }
     if (n == 2) {
     g.setColor(Color.CYAN);
     }
     if (n == 1) {
     g.setColor(Color.ORANGE);
     }
     if (n == 0) {
     g.setColor(Color.PINK);
     }
    
     g.fillRect(x, y, width, height);
    
     return true;
     }
    (Formatierung stammt aus Eclipse)
     
  3. 26. Oktober 2014
    AW: [JAVA] Bild per Rekursion malen, leider falschrum

    Cool, vielen Dank
     
  4. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.