[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. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  1. #1 25. Oktober 2014
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    Hallo RR,

    folgendes soll programmiert werden (Übung für Rekursion):
    Spoiler
    [​IMG]

    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:
    [​IMG]
     

  2. Anzeige
  3. #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)
     
  4. #3 26. Oktober 2014
    AW: [JAVA] Bild per Rekursion malen, leider falschrum

    Cool, vielen Dank :)
     

  5. Videos zum Thema
Die Seite wird geladen...
Similar Threads - JAVA Bild per
  1. Antworten:
    2
    Aufrufe:
    1.246
  2. Antworten:
    2
    Aufrufe:
    1.440
  3. Antworten:
    2
    Aufrufe:
    430
  4. Antworten:
    8
    Aufrufe:
    526
  5. Antworten:
    6
    Aufrufe:
    1.438