Java Interface graphique pour un Arbre

BiBiO

Elite
Bonjour,

J'aimerais représenter un Arbre (donc des noeuds et des arcs) de facon graphique avec Java.
J'ai deja fait ma fenetre avec qq boutons avec java SWING. Mnt il ne me manque plus de faire la visualisation des noeuds et des arcs de mon arbre.
Il y a moyen de représenter ca avec Jgraph? Dans ma fenetre deja créée, il suffira d'ajouter un Container avec la répresentation graphique ou c'est plus compliqué que cela?
Je débute avec les interfaces graphiques :p

Pouvez-vous m'expliquer comme faire ? Ou si vous avez un ptit tuto sympa:)

Merci d'avance !
 

Skarbone

Le méchant Ω
a mon avis ca risque d'être plus compliqué que ca, du moins pour gérer correctement le positionnement des différentes feuilles et branches de ton arbre :/
 

KAMI

spim spam spoum
Faire un arbre c'est vraiment pas de la tarte... J'ai du en faire à l'unif suivant différents algorithmes et c'est simple à faire. Faut bien gérer la relation parents/fils, fils de gauche ou de droite ? Comment faire la lecture de l'arbre ? y a beaucoup de paramètres.

j'ai un livre de référence la dessus si tu veux essayer d'aller le louer dans une bibli ou autre :

Data structure & Algorithmes de Michael T.Goodrich et Roberto Tamassia
 
1er
OP
BiBiO

BiBiO

Elite
Je voudrais créer un arbre dynamiquement en fait (il sera sauvegarder dans un vecteur).
Pour l'instant j'ai mon interface graphique avec 3 boutons (Inserer, getmin/getmax et quitter)
J'ai aussi mis dans mon container des Scrollbar a droite et en bas (Comme ca même si mon arbre a bcp de noeuds et qu'il depasse la fenetre, il suffira de jouer avec les ScrollBar..)

Mais la j'ai un soucis pour insérer mon graph dans mon Container ... Si je dessine un bete noeud (drawOval), il se trouve en dessous du scroll bar horizontal... et non entre mes boutons et le scroll bar horizontal..

Voici le probleme : (Heureusement que l'image ne se rafraichit pas tres vite quand je maximise la fenetre ^^ )
 

Skarbone

Le méchant Ω
tu dois utiliser le layout pour ca me semble...
 
1er
OP
BiBiO

BiBiO

Elite
En fait mon graphe n'est pas dans le container (avec les boutons, scroll bar et tout )... Et je n'arrive pas à le mettre dedans ...
Ce que je fais :

Container contentPane = this.getContentPane();
toolbar = new JPanel();
contentPane.add(BorderLayout.NORTH, toolbar);
// Puis j'ajoute tous les boutons ds toolbar

//Scroll bar
JScrollBar hbar = new JScrollBar(JScrollBar.HORIZONTAL, 30, 20, 0, 300);
JScrollBar vbar = new JScrollBar(JScrollBar.VERTICAL, 30, 40, 0, 300);

add(hbar, BorderLayout.SOUTH);
add(vbar, BorderLayout.EAST);


[...]

public void paint( Graphics g ) {
//paintComponent(g);
g.drawOval (50,50,30,30);
}

Mais je ne sais pas vraiment comment rajouter le graphique dans ce container ... Pour qu'il commence juste en dessous de mes boutons...
Ce qui est aussi bizarre, c'est qd je minimise la fenetre puis que je la remaximise, je visualise mon "oval" dans ma fenetre ....
 

AcidBird

Elite
En même temps dans ton bout de code il manque l'essentiel, qu'est-ce que tu passes à ta fonction paint ???

Je suis pas un expert mais d'après ce que j'avais lu à l'époque, un truc du genre devrait fonctionner :
....

JPanel p;

//Créer le panel et initialiser ton panel ou tout autre container

contentPane.add(p, BorderLayout.Center);
paint(p.getGraphics());
 
1er
OP
BiBiO

BiBiO

Elite
C'est ce que j'avais fait pourtant mais comme ca ne marchait pas je ne l'ai pas mis ici sur gamerz...
Je vais réessayer et je vous tiens au courant ;)
 
1er
OP
BiBiO

BiBiO

Elite
Le p.getGraphics () me sort chaque fois une erreur de segmentation lors de l'execution...
Exception in thread "main" java.lang.NullPointerException

EDIT : En faisant un super.paint (g) dans ma méthode "void paint (...)" le rond ne s'affiche plus en dessous mais il n'est tjs pas dans le container car les scrollbar ne fonctionnent pas ...
 

Angy

Elite
C'est quand même de la vraie daube le GUI en java :-D
 

Tekura

Elite
pourquoi tu fais des jscrollbar... t'aurais peut etre plus facile ds un JScrollPane non?
c'est un panel avec des scroll bar ;)

Enfin j'ai pas ton code, mais moi a ta place j'aurai fais une classe qui extends JScrollPane et la tu redefinie la methode paintComponent().
 

AcidBird

Elite
A mon avis ca viendra une fois qu'il arrivera à dessiner sur son composant ça :)

Ton exception est probablement dûe au faite que tu essaies d'accéder au graphics avant que ton composant ne soit visible. Je crois qu'il n'est assigné qu'à partir du moment ou ton composant est visible.
 
1er
OP
BiBiO

BiBiO

Elite
Merci pr vos réponses :).
J'ai enfin compris comment marchait cette méthode paint ... (enfin pas encore tout mais plus ou moins ^^). J'ai fait un classe Graphics extends JPanel puis je crée dans ma classe de départ un objet Graphics que j'ajoute au container ^^. Enfin je suis sur que je ne vous apprends rien mais c'est au cas où des novices passe par ici :)
 
Haut