Dessiner un arbre via un tableau [Résolu/Fermé]

Messages postés
1054
Date d'inscription
mardi 1 mars 2011
Statut
Membre
Dernière intervention
10 mai 2015
- - Dernière réponse : KX
Messages postés
16018
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
2 septembre 2019
- 13 déc. 2012 à 14:11
Bonjour à tous,

Ayant terminé mon projet sur les arbres, je dois désormais dessiner mon arbre à partir d'un tableau.
Problème : je ne sais même pas comment tracer ne serait-ce qu'une ligne avec Java.

J'ai cherché sur Internet, j'ai lu au moins 3 ou 4 cours différents mais je ne comprends rien, ils parlent de JPanel, de Panneau, de Fenêtre... Il faut combien de classes pour dessiner quelque chose ??!!! Car moi je suis complètement perdu, si quelqu'un pourrait m'expliquer cela serait super sympa.

Merci beaucoup d'avance.

Afficher la suite 

11 réponses

Messages postés
64881
Date d'inscription
vendredi 24 août 2007
Statut
Membre
Dernière intervention
14 août 2019
8430
0
Merci
Bonjour
Vois ceci si cela peut 'aider amis perso je n'ai jamais essayé

http://docs.google.com/...
Messages postés
1054
Date d'inscription
mardi 1 mars 2011
Statut
Membre
Dernière intervention
10 mai 2015
43
0
Merci
Bonjour à tous

import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.Graphics;
import java.awt.Color;
import javax.swing.JPanel;

public class affarbre
{
public static void affarbre(int tab[])
{
// On crée la fenêtre.
JFrame arbre = new JFrame("Comment dessiner un arbre...");
// On doit pouvoir la fermer en cliquant sur la croix rouge.
arbre.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
// On centre la fenêtre
arbre.setLocationRelativeTo(null);
// Pour voir la fenêtre :
arbre.setVisible(true);
arbre.setSize(1024,768);
arbre.setLocationRelativeTo(null);
arbre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

panel.pack();
panel.show();
}
public static void main (String[] args)
{
int[] tab;
tab = new int[5];
tab[1] = 4;
tab[2] = 20;
tab[3] = 15;
tab[4] =67;
affarbre(tab);
}
}


Voilà pour l'instant ce que j'ai fait mais je ne sais pas comment désormais afficher des ronds etc...
Messages postés
16018
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
2 septembre 2019
2404
0
Merci
Déjà, il serait intéressant de donner des coordonnées à chaque noeud de l'arbre complet associé (même si ton arbre n'est pas complet), par exemple numéroter tes feuilles de 2 en 2 sur les X, puis chaque noeud père aurait en X la moyenne des X de ses deux fils. Pour les Y, on prendrait 2 fois la profondeur des noeuds dans l'arbre :

            3,0            

    1,2             5,2    

0,4     2,4     4,4     6,4

Une fois que ça c'est fait il suffit de dessiner les cases de textes au bon endroit :

public static void main(String...args)
{
    JFrame frame = new JFrame("Mon arbre");
    frame.setLayout(null);

    frame.setSize(500,300);
    Dimension dim = frame.getSize();
    
    Arbre a = new Arbre();
    
    // Dimensions de chaque cases en fonction du nombre de cases à dessiner
    int h = a.hauteur();    
    int dw = (dim.width-16)/((int) Math.pow(2,h)*2-1);
    int dh = (dim.height-38)/(2*h+1);
    
    for (Noeud n : a.getNoeuds())
    {
        JLabel label = new JLabel(n.etiquette(),JLabel.CENTER);
        frame.add(label);
        label.setBounds(n.x()*dw,n.y()*dh,dw,dh);
        label.setBorder(BorderFactory.createLineBorder(Color.BLACK));
    }
    
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

Évidement les classes Arbre, Noeud, et leurs méthodes, vont dépendre de ce que tu as déjà fait. Pour tester j'ai fait une implémentation bidon qui me donne directement les coordonnées X,Y que je veux.

class Noeud
{
    Noeud(int x,int y,String str)
    {
        this.x=x;
        this.y=y;
        this.str=str;
    }
    
    private int x;
    public int x() { return x; }
    
    private int y;
    public int y() { return y; }
    
    private String str;
    public String etiquette() { return str; }
}

class Arbre
{
    public int hauteur() { return 2; }
    
    public Noeud[] getNoeuds() {
        return new Noeud[] { new Noeud(3,0,"(3,0)"), new Noeud(1,2,"(1,2)"), new Noeud(5,2,"(5,2)"), new Noeud(0,4,"(0,4)"), new Noeud(2,4,"(2,4)"), new Noeud(4,4,"(4,4)"), new Noeud(6,4,"(6,4)") }; 
    }    
}

Remarque : on devrait pouvoir faire plus "joli" en utilisant un GridLayout par exemple, mais aussi bien sûr en rajoutant les lignes entre chaque noeuds...
Messages postés
1054
Date d'inscription
mardi 1 mars 2011
Statut
Membre
Dernière intervention
10 mai 2015
43
0
Merci
Bonsoir,

En fait j'aimerai comprendre comme dessiner dans ma fenêtre JFrame surtout, le reste je pense que ça ira, en réfléchissant et tout j'y arriverai mais déjà faire un rond je n'y arrive pas...
KX
Messages postés
16018
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
2 septembre 2019
2404 -
Pour faire ça vraiment bas niveau tu dois surcharger la méthode void paint(Graphics), et utiliser l'objet Graphics pour dessiner, avec les méthodes drawOval(x,y,width,height), drawLine(x1,y1,x2,y2) et drawString(str,x,y) pour ce qui t'intéresse.

Remarque : lorsque tu auras dépassé le stade très scolaire de cet exercice, je t'invite à utiliser GraphStream qui gère graphiquement tout type de graphes (dont les arbres bien sûr).
Messages postés
1054
Date d'inscription
mardi 1 mars 2011
Statut
Membre
Dernière intervention
10 mai 2015
43
0
Merci
Dans le code que j'ai fait jusque là, ça donne quoi alors ?
KX
Messages postés
16018
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
2 septembre 2019
2404 -
Il faudrait changer la structure du code pour avoir une classe qui hérite de JFrame, car il faut que tu redéfinisses la méthode paint pour utiliser l'objet Graphics comme je l'ai expliqué hier.

Mais au niveau de ton tableau, on est encore très loin d'avoir un arbre ! Mais bon, tu as dis qu'une fois la partie "dessin" acquise tu te débrouillerais, alors chaque chose en son temps ;-)

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JFrame;

public class AffArbre extends JFrame
{
    private static final long serialVersionUID = 1;
    
    private final int[] tab;
    
    public AffArbre(int...arbre)
    {
        tab = arbre;
        
        setTitle("Comment dessiner un arbre...");
        setSize(400+16,400+38);
        setLocationRelativeTo(null);
        setVisible(true);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        
    }
    
    @Override
    public void paint(Graphics g)
    {
        super.paint(g);
        
        // Utiliser "g" pour dessiner "tab"
        
        // Exemple bidon :
        
        int x1=200, y1=100, // position de la racine
            x2=100, y2=300, // position du fils gauche
            x3=300, y3=300, // position du fils droit
        
        int r=20, d=2*r; // paramètre graphiques (taille des ronds)
        
        g.setColor(Color.BLACK);
        g.drawLine(x1, y1, x2, y2);
        g.drawLine(x1, y1, x3, y3);
        
        g.setColor(Color.GRAY);
        g.fillOval(x1-r, y1-r, d, d);
        g.fillOval(x2-r, y2-r, d, d);
        g.fillOval(x3-r, y3-r, d, d);
        
        g.setColor(Color.BLACK);
        g.drawString("1",x1,y1);
        g.drawString("2",x2,y2);
        g.drawString("3",x3,y3);
    }
    
    public static void main (String[] args)
    {
        new AffArbre(4,20,15,67);
    }
}
Étienne9
Messages postés
1054
Date d'inscription
mardi 1 mars 2011
Statut
Membre
Dernière intervention
10 mai 2015
43 -
Bonjour,

Il fait quoi exactement ce code ? Et mes lignes pour dessiner je les mets où ?
KX
Messages postés
16018
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
2 septembre 2019
2404 -
Exécutes le et tu verras bien ce qu'il fait, c'est quand même assez évident !
Messages postés
1054
Date d'inscription
mardi 1 mars 2011
Statut
Membre
Dernière intervention
10 mai 2015
43
0
Merci
Je me torture mais rien à faire ! Ma binôme et moi on ne comprend rien de rien !!!
KX
Messages postés
16018
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
2 septembre 2019
2404 -
Autant que je lise dans cette discussion, pour l'instant tu n'as rien fait, à part ouvrir une fenêtre vide, et créer un tableau... On est très loin d'avoir des arbres !

Pourtant quand on regarde mes codes tout est là, il y a des arbres dessinés, des algorithmes, bref tout ce qu'il faut pour y arriver ! Je ne vais pas faire ton projet à ta place non plus...
Étienne9
Messages postés
1054
Date d'inscription
mardi 1 mars 2011
Statut
Membre
Dernière intervention
10 mai 2015
43 -
Je ne demande pas que vous me faites à ma place, seulement il y a plein de parties où c'est le brouillard de guerre total...
Exemple : les entiers que AffArbre prend en paramètre qui, qu'on en mette 1 ou 50 ça ne change rien...
KX
Messages postés
16018
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
2 septembre 2019
2404 -
Ça ne change rien parce que je n'ai pas utilisé le tableau "tab" ça c'est à toi de le faire, moi je me suis contenté d'un exemple bidon, d'ailleurs c'est marqué dans le code :

public void paint(Graphics g)
{
    super.paint(g);
        
    // Utiliser "g" pour dessiner "tab"
        
    // Exemple bidon :

Il faut que tu regardes comment fonctionne mon exemple bidon pour faire la même chose avec "tab".
Mon exemple utilises 3 valeurs, mais toi ça va dépendre de ce que tu mets dans le tableau !
Étienne9
Messages postés
1054
Date d'inscription
mardi 1 mars 2011
Statut
Membre
Dernière intervention
10 mai 2015
43 -
Bonjour,

J'ai repris votre algorithme et voilà ce que j'ai fait pour l'instant. Je dois partir, je continuerai plus tard (autre jour ou....)

import java.awt.Color;
import java.awt.Graphics;
import java.lang.Math.*;
import javax.swing.JFrame;

public class affarbre extends JFrame
{
private static final long serialVersionUID = 1;

private final int[] tab;

public affarbre(int...arbre)
{
tab = arbre;
setTitle("Arbre");
setSize(1024,768);
setLocationRelativeTo(null);
setVisible(true);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

}
public void paint(Graphics g)
{
super.paint(g);
int hauteur = ((int) Math.log((double) tab.length-1))/((int)Math.log((double) 2));
int nmax=0;
int n=0;
while (hauteur >= 0)
{
nmax = (int) Math.pow(2,hauteur);
n = (int) (((Math.pow(2,hauteur+1)) -1) - ((Math.pow(2,hauteur)) -1));*
// dessin sera ici
hauteur = hauteur-1;
}
}

public static void main (String[] args)
{
new affarbre();
}
}
Messages postés
1054
Date d'inscription
mardi 1 mars 2011
Statut
Membre
Dernière intervention
10 mai 2015
43
0
Merci
Bonjour,

J'ai pas mal avancé mais il y a un problème. Tout marche jusque n =3 mais à n=4 ça cale...
Voilà mon code, si vous pouviez jeter un oeil, merci beaucoup :
  
import java.awt.Color;  
import java.awt.Graphics;  
import java.lang.Math.*;  
import javax.swing.JFrame;  

public class affarbre extends JFrame  
{  
    private static final long serialVersionUID = 1;  
    private final int[] tab;  
    public affarbre(int...arbre)  
    {  
        tab = arbre;  
        setTitle("Arbre");  
        setSize(1024,768);  
        setLocationRelativeTo(null);  
        setVisible(true);  
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);     
    }  
    public void paint(Graphics g)  
    {  
        super.paint(g);  
        int hauteur = (int)(( Math.log((double) tab.length-1))/(Math.log((double) 2)));  
        int n=0;  
        int i=0;  
        int y=0;  
        int indicetab=tab.length-1;  
        int pas=(int) ((1024)/(Math.pow(2,hauteur)+1));  
        int x=pas;  
        int pasprec=0;  
        while (hauteur >= 0)   
        {  
         if (pasprec == 0) {  
          n = (int) (tab.length - Math.pow(2,hauteur));  
         }  
         else {  
          n = (int) Math.pow(2,hauteur);  
         }  
         y = (hauteur+2)*33;  
         if (pasprec != 0) {  
          x = (int) pasprec + (pasprec/2);  
         }  
         indicetab=indicetab-n+1;  
         for (i=1;i<=n;i++) {  
          g.fillOval(x,y,23,23);  
          g.drawString(tab[indicetab] + " ",x,y);  
          indicetab=indicetab+1;  
          x = x+pas;  
         }  
         indicetab = indicetab - n - 1;  
         pasprec = pas;  
         pas = 2*pas;  
         hauteur = hauteur-1;  
        }  
    }  
    public static void main (String[] args)  
    {  
     int tab[];  
     tab = new int[5];  
     tab[1] = 0;  
     tab[2] = 22;  
     tab[3] = 8;  
     tab[4] = 6;  
     new affarbre(tab);  
    }  
}  
KX
Messages postés
16018
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
2 septembre 2019
2404 -
Mais où est ton arbre !!? À la limite je me demande même : est-ce que tu sais ce qu'est un arbre ?
Tu ne peux pas manipuler ton tableau directement, il faut que tu mettes les valeurs dans un arbre avant d'envisager de dessiner quoi que ce soit !

public class Arbre
{
    private Noeud noeud;
    private Arbre filsGauche, filsDroit, pere;

    public int hauteur();
    
    public Noeud[] getNoeuds();
}

Remarque : la classe Noeud j'en avais déjà proposé une ici, elle permet de stocker les coordonnées dont tu as besoin pour faire le dessin final, mais il faut passer par l'arbre pour calculer ces coordonnées (par exemple comme je l'avais déjà indiqué ici).

Bref, comme je l'ai dit hier, tu as tout ce qu'il faut dans cette discussion pour faire ce programme, mais il faut prendre la discussion dans son ensemble !
Messages postés
1054
Date d'inscription
mardi 1 mars 2011
Statut
Membre
Dernière intervention
10 mai 2015
43
0
Merci
J'ai rajouté les lignes entre les noeuds, pour moi construire une structure d'arbre ça ne sert à rien. Je suis persuadé qu'on peut directement construire l'arbre dans construire d'autres structures.
Exécutez-le et vous verrez que ça ressemble presque à un arbre !!

import java.awt.Color;
import java.awt.Graphics;
import java.lang.Math.*;
import javax.swing.JFrame;

public class affarbre extends JFrame
{
    private static final long serialVersionUID = 1;
    private final int[] tab;
    public affarbre(int...arbre)
    {
        tab = arbre;
        setTitle("Arbre");
        setSize(1024,768);
        setLocationRelativeTo(null);
        setVisible(true);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);   
    }
    public void paint(Graphics g)
    {
        super.paint(g);
        int hauteur = (int)(( Math.log((double) tab.length-1))/(Math.log((double) 2)));
        int n=(int) (tab.length - Math.pow(2,hauteur));
        int i=0;
        int y=0;
        int indicetab=tab.length-1;
        int pas=(int) ((1024)/(Math.pow(2,hauteur)+1));
        int x=pas;
        int pasprec=0;
        while (hauteur >= 0) 
        {
        	if (pasprec != 0) {
        		n = (int) Math.pow(2,hauteur);
        		x = (int) (pasprec + (pasprec/2));
        	}
        	y = (hauteur+2)*33;
        	indicetab=indicetab-n+1;
        	for (i=1;i<=n;i++) {
        		g.fillOval(x,y,23,23);
        		// ici
        		if (hauteur > 0) {
        			if ((i % 2) == 0) {
        				g.drawLine(x,y,(int)(x-(pas/2)),y-33);
        			} 
        			else {
        				g.drawLine(x,y,(int)(x+(pas/2)),y-33);
        			}
        		}
        		// ici
        		g.drawString(tab[indicetab] + " ",x,y);
        		indicetab=indicetab+1;
        		x = x+pas;
        	}
        	indicetab = indicetab-n-1;
        	pasprec = pas;
        	pas = 2*pas;
        	hauteur = hauteur-1;
        }
    }
    public static void main (String[] args)
    {
     int tab[];
     tab = new int[10];
     tab[1] = 0;
     tab[2] = 22;
     tab[3] = 8;
     tab[4] = 6;
     tab[5] = 12;
     tab[6] = 9;
     tab[7] = 54;
     tab[8] = 100;
     tab[9] = 456;
     new affarbre(tab);
    }
}
KX
Messages postés
16018
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
2 septembre 2019
2404 -
"ça ressemble presque à un arbre", c'est vrai qu'on est vaguement sur le bon chemin, même si ce n'est pas encore très esthétique, ce n'est plus qu'une question de réglages...

Quelques remarques sur tes tableaux : la case 0 n'est ni initialisée, ni affichée dans l'arbre, c'est surprenant !

De plus il est inutile de remplir ton tableau case par case, tu peux faire directement ceci :

public static void main(String[] args)
{
    int tab[] = { 0, 22, 8, 6, 12, 9, 54, 100 ,456};
    new affarbre(tab);
}

Ou encore plus simple, grâce au point de suspensions dans le constructeur, tu peux faire ceci :

public static void main(String[] args)
{
    new affarbre(0, 22, 8, 6, 12, 9, 54, 100 ,456);
}
Messages postés
1054
Date d'inscription
mardi 1 mars 2011
Statut
Membre
Dernière intervention
10 mai 2015
43
0
Merci
Je vais me laver. Écoutez, j'ai trouvé d'où vient le problème, en fait pasprec contient l'espace entre deux noeuds de la hauteur juste en dessous.

Le soucis c'est que plus bas je fais pas = 2*pas, en fait si vous voulez c'est bon mais le soucis c'est qu'en montant dans l'arbre plus ça va et plus l'écart entre deux noeud est différent des bords...
Je vais réfléchir en prenant ma douche mais je pense qu'il va juste me falloir une variable supplémentaire pour traiter le bord gauche c'est tout au lieu d'utiliser pasprec.

Pour ce qui est de la case 0, c'est l'enseignant qui nous a dit de ne pas l'utiliser car avant l'affichage on fait le tri par tas et que pour trouver le père d'un noeud du tableau on fait i/2 et pour les fils c'est 2i et 2i+1 et cela ne marche pas si on commence à 0.
Messages postés
1054
Date d'inscription
mardi 1 mars 2011
Statut
Membre
Dernière intervention
10 mai 2015
43
0
Merci
j'ai réussi à corriger le problème, c'est 100fois mieux.
Admirez le chef d'oeuvre :)
Les légers problèmes viennent du fait qu'à chaque fois on caste en INT je pense.

import java.awt.Color; 
import java.awt.Graphics; 
import java.lang.Math.*; 
import javax.swing.JFrame; 

public class affarbre extends JFrame 
{ 
    private static final long serialVersionUID = 1; 
    private final int[] tab; 
    public affarbre(int...arbre) 
    { 
        tab = arbre; 
        setTitle("Arbre"); 
        setSize(1024,768); 
        setLocationRelativeTo(null); 
        setVisible(true); 
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);    
    } 
    public void paint(Graphics g) 
    { 
        super.paint(g); 
        int hauteur = (int)(( Math.log((double) tab.length-1))/(Math.log((double) 2))); 
        int n=(int) (tab.length - Math.pow(2,hauteur)); 
        int i=0; 
        int y=0; 
        int indicetab=tab.length-1; 
        int pas=(int) ((1024)/(Math.pow(2,hauteur)+1)); 
        int x=pas; 
        int pasprec=0; 
        int bordgauche=pas; 
        while (hauteur >= 0)  
        { 
         if (pasprec != 0) { 
          n = (int) Math.pow(2,hauteur); 
          x = bordgauche; 
         } 
         y = (hauteur+2)*33; 
         indicetab=indicetab-n+1; 
         for (i=1;i<=n;i++) { 
          g.fillOval(x,y,23,23); 
          if (hauteur > 0) { 
           if ((i % 2) == 0) { 
            g.drawLine(x,y,(int)(x-(pas/2)),y-33); 
           }  
           else { 
            g.drawLine(x,y,(int)(x+(pas/2)),y-33); 
           } 
          } 
          g.drawString(tab[indicetab] + " ",x,y); 
          indicetab=indicetab+1; 
          x = x+pas; 
         } 
         indicetab = indicetab-n-1; 
         pasprec = pas; 
         pas = 2*pas; 
         bordgauche = (int) (bordgauche+(pasprec/2));// !!!!!!!!!!! 
         hauteur = hauteur-1; 
        } 
    } 
    public static void main (String[] args) 
    { 
     new affarbre(0,0,22,8,6,12,9,54,100,456); 
    } 
} 
Messages postés
1054
Date d'inscription
mardi 1 mars 2011
Statut
Membre
Dernière intervention
10 mai 2015
43
0
Merci
Bonjour,

Désolé pour ce troisième message, j'ai agrandi l'arbre pour voir jusque où je peux afficher et SURTOUT j'ai corrigé les défauts sur les noeuds et le texte... À mon avis je ne peux pas faire mieux.

J'ai réussi à faire mon algorithme que j'avais en tête grâce à vous, merci beaucoup ! Pour ceux que ça intéresse, mon algorithme final (merci de ne pas pomper si c'est un exercice ou un projet à faire) :

import java.awt.Color;
import java.awt.Graphics;
import java.lang.Math.*;
import javax.swing.JFrame;

public class affarbre extends JFrame
{
    private static final long serialVersionUID = 1;
    private final int[] tab;
    public affarbre(int...arbre)
    {
        tab = arbre;
        setTitle("Arbre");
        setSize(1024,768);
        setLocationRelativeTo(null);
        setVisible(true);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);   
    }
    public void paint(Graphics g)
    {
        super.paint(g);
        int hauteur = (int)(( Math.log((double) tab.length-1))/(Math.log((double) 2)));
        int n=(int) (tab.length - Math.pow(2,hauteur));
        int i=0;
        int y=0;
        int indicetab=tab.length-1;
        int pas=(int) ((1024)/(Math.pow(2,hauteur)+1));
        int x=pas;
        int pasprec=0;
        int bordgauche=pas;
        while (hauteur >= 0) 
        {
        	if (pasprec != 0) {
        		n = (int) Math.pow(2,hauteur);
        		x = bordgauche;
        	}
        	y = (hauteur+2)*33;
        	indicetab=indicetab-n+1;
        	for (i=1;i<=n;i++) {
        		g.fillOval(x-11,y-7,23,23);
        		if (hauteur > 0) {
        			if ((i % 2) == 0) {
        				g.drawLine(x,y,(int)(x-(pas/2)),y-33);
        			} 
        			else {
        				g.drawLine(x,y,(int)(x+(pas/2)),y-33);
        			}
        		}
        		g.drawString(tab[indicetab] + " ",x,y-7);
        		indicetab=indicetab+1;
        		x = x+pas;
        	}
        	indicetab = indicetab-n-1;
        	pasprec = pas;
        	pas = 2*pas;
        	bordgauche = (int) (bordgauche+(pasprec/2));
        	hauteur = hauteur-1;
        }
    }
    public static void main (String[] args)
    {
     new affarbre(0,0,22,8,6,12,9,54,100,456,40,52,79,75,65,24,13,16,19,10,14,15,85,95,64,78,54,40,1,2,4,5,6,8,9,7,5,5,4,6,9,56,40,75,45,85,9,8,7,5,41,6,8,5,45,6,45,65,2,5,9,8,7,56);
    }
}
KX
Messages postés
16018
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
2 septembre 2019
2404 -
"pour voir jusque où je peux afficher", pour ça c'est facile, il suffit de donner un tableau vide de grande taille et regarder le résultat :

public static void main (String[] args)
{
    new affarbre(new int[512]);
}

Une amélioration évidente de ton code serait de pouvoir prendre en compte n'importe quelle taille d'arbre et d'avoir un affichage correct malgré tout, par exemple avec un système de zoom et/ou en dessinant ton arbre dans une fenêtre avec des barres de défilement...

À voir (pour approfondir) : How To Use Sliders, et How To Use Scroll Panes