Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

créer son propre composant Swing

5 réponses
Avatar
Speedster
J'ai déjà posté un message dans ce NG dans lequel j'expliquais que je
voulais représenter l'évolution d'un tournoi de football. Il faut donc
afficher chaque match sous forme d'arbre et les finalistes pointent vers une
coupe (comme dans la plupart des jeux vidéos). Je souhaite ajouter des
résultats de match ce qui mettra à jour cet arbre soit en mettant en rouge
par exemple la branche du vainqueur ou bien en écrivant le nom du vainqueur
comme suit:

INTER --------------|
|----------------- ARSENAL
ARSENAL ----------|

Ce qui m'intéresse c'est donc d'écrire un composant qui en fonction du
nombre d'équipes me constitue un arbre complet, par exemple pour huit
équipes :

INTER --------------|
|----------------- |
ARSENAL ----------| |

|------------- COUPE --------- (Schéma symétrique
REAL MADRID ------| |
avec d'autres équipes)
|---------------|
JUVENTUS -----------|

--
Click here to answer / cliquez ci dessous pour me repondre
http://www.cerbermail.com/?3LZDlyL6dF

5 réponses

Avatar
Nicolas Delsaux
Le 10.10 2003, "Speedster" s'est levé(e) et s'est
dit "tiens, je vais écrire aux mecs de fr.comp.lang.java"

Ce qui m'intéresse c'est donc d'écrire un composant qui en fonction du
nombre d'équipes me constitue un arbre complet, par exemple pour huit
équipes :

Oui, mais enfin, si tu ne poses pas de question, on ne risque pas de te

répondre ;-)
Pour ce genre de composants ultra-customisés, je pense que tu vas devoir
sortir l'artillerie lourde : Java2D, dessiner tes infos dans une image, et
afficher l'image à la fin.
Un conseil : essayes, dans la mesure du possible, de conserver le modèle
MVC de Swing pour ton composant, tu sera ainsi mieux à même de le faire
évoluer.

--
Nicolas Delsaux
"Celui qui sait en quoi consiste l'action humaine nourrit ce que sa
conscience saisit au moyen de ce qu'elle ne saisit pas."
Tchouang-Tseu

Avatar
Speedster
Mais je n'ai aucune idée de la façon de faire pour écrire le composant, les
méthodes à redefinir, la classe...
N'aurais-tu pas un exemple ?


"Nicolas Delsaux" a écrit dans le
message de news:
Le 10.10 2003, "Speedster" s'est levé(e) et s'est
dit "tiens, je vais écrire aux mecs de fr.comp.lang.java"

Ce qui m'intéresse c'est donc d'écrire un composant qui en fonction du
nombre d'équipes me constitue un arbre complet, par exemple pour huit
équipes :

Oui, mais enfin, si tu ne poses pas de question, on ne risque pas de te

répondre ;-)
Pour ce genre de composants ultra-customisés, je pense que tu vas devoir
sortir l'artillerie lourde : Java2D, dessiner tes infos dans une image, et
afficher l'image à la fin.
Un conseil : essayes, dans la mesure du possible, de conserver le modèle
MVC de Swing pour ton composant, tu sera ainsi mieux à même de le faire
évoluer.

--
Nicolas Delsaux
"Celui qui sait en quoi consiste l'action humaine nourrit ce que sa
conscience saisit au moyen de ce qu'elle ne saisit pas."
Tchouang-Tseu



Avatar
Nicolas Delsaux
Le 10.10 2003, "Speedster" s'est levé(e) et s'est
dit "tiens, je vais écrire aux mecs de fr.comp.lang.java"

Mais je n'ai aucune idée de la façon de faire pour écrire le
composant, les méthodes à redefinir, la classe...
N'aurais-tu pas un exemple ?

Il doit sûrement y en avoir dans le Swing tutorial.

Saches dans tous les cas que je te propose un travail assez complexe, qui
risque fort d'être assez rebutant (quoi que je viens de penser à une ruse
balaize), et surtout assez long.
Tu vas créer une classe dérivée de JComponent, qui représentera ton arbre
de matches. Cette classe peut utiliser un TreeModel, puisque celui-ci
fournit justement une hiérarchie d'informations. Il te faut donc bien
comprendre la manière dont marche un TreeModel. vas donc voir la doc
afférante, ça t'aidera à comprendre ce que je sous-entend.
Une fois que tu dispose de ton TreeModel, reste le gros morceau : bien
dessiner tout ça. Et là, tu n'as pas vraiment le choix : ta méthode paint
(Graphics g) va être assez musclée, puisque c'est elle qui fera tout le
travail. Elle va donc prendre la racine de ton arbre, la dessiner au point
0 de ton dessin, puis la décaler vers la droite pour dessiner les deux
branches, et les deux noeuds suivants, et tu pourras ainsi construire
récursivement ton arbre de matches. Ca donne l'algo suivant

1 - Le noeud courant est la racine
2 - dessiner l'image du noeud courant
3 - dessiner à sa gauche l'image du branchement d'arbre, dépendant du
nombre de fils du noeud courant
4 - pour chaque enfant, retourner au point 2

5 - récupérer l'image complète
6 - la dessiner dans le Graphics2D

--
Nicolas Delsaux
"Les enfants sont des créatures extraordinaires, quand ils ne sont pas
simplement chiants."
Vernor Vinge

Avatar
Speedster
Merci beaucoup pour ton aide...
J'espère que j'y arriverais.
En y refléchissant bien et avec les tutoriaux, ça devrait pouvoir se faire !
Tu as dit qu'il faut dessiner l'arbre avec paint puis dans Graphics2D.
Pourrais-tu m'éclaircir sur ce point ?


"Nicolas Delsaux" a écrit dans le
message de
news:
Le 10.10 2003, "Speedster" s'est levé(e) et s'est
dit "tiens, je vais écrire aux mecs de fr.comp.lang.java"

Mais je n'ai aucune idée de la façon de faire pour écrire le
composant, les méthodes à redefinir, la classe...
N'aurais-tu pas un exemple ?

Il doit sûrement y en avoir dans le Swing tutorial.

Saches dans tous les cas que je te propose un travail assez complexe, qui
risque fort d'être assez rebutant (quoi que je viens de penser à une ruse
balaize), et surtout assez long.
Tu vas créer une classe dérivée de JComponent, qui représentera ton arbre
de matches. Cette classe peut utiliser un TreeModel, puisque celui-ci
fournit justement une hiérarchie d'informations. Il te faut donc bien
comprendre la manière dont marche un TreeModel. vas donc voir la doc
afférante, ça t'aidera à comprendre ce que je sous-entend.
Une fois que tu dispose de ton TreeModel, reste le gros morceau : bien
dessiner tout ça. Et là, tu n'as pas vraiment le choix : ta méthode paint
(Graphics g) va être assez musclée, puisque c'est elle qui fera tout le
travail. Elle va donc prendre la racine de ton arbre, la dessiner au point
0 de ton dessin, puis la décaler vers la droite pour dessiner les deux
branches, et les deux noeuds suivants, et tu pourras ainsi construire
récursivement ton arbre de matches. Ca donne l'algo suivant

1 - Le noeud courant est la racine
2 - dessiner l'image du noeud courant
3 - dessiner à sa gauche l'image du branchement d'arbre, dépendant du
nombre de fils du noeud courant
4 - pour chaque enfant, retourner au point 2

5 - récupérer l'image complète
6 - la dessiner dans le Graphics2D

--
Nicolas Delsaux
"Les enfants sont des créatures extraordinaires, quand ils ne sont pas
simplement chiants."
Vernor Vinge



Avatar
Nicolas Delsaux
Le 10.10 2003, "Speedster" s'est levé(e) et s'est
dit "tiens, je vais écrire aux mecs de fr.comp.lang.java"

Merci beaucoup pour ton aide...
J'espère que j'y arriverais.
En y refléchissant bien et avec les tutoriaux, ça devrait pouvoir se
faire ! Tu as dit qu'il faut dessiner l'arbre avec paint puis dans
Graphics2D. Pourrais-tu m'éclaircir sur ce point ?

T'as du bol, j'y ai pensé ce week-end : il existe sur sourceforge un projet

de généalogie (http://jgenea.sourceforge.net/), pour lequel des composants
très proches de ceux que tu recherche ont été écrits pour afficher les
arbres ascendants et descendants d'une personne. Peut-être devrais-tu te
rapprocher de l'auteur (apparement français) pour voir si il ne peut pas
extraire de son code le composant nécessaire.

--
Nicolas Delsaux
N > Sur Internet, personne ne sait que vous êtes ... un singe
in fras, to be or not to be