Java et question technique pour génération de Panels à la volée

Java et question technique pour génération de Panels à la volée - Java - Programmation

Marsh Posté le 28-08-2003 à 19:30:22    

Bonjour,
 
 je suis sur la conception d'un Installeur en Java.
Je suis sur mon diagramme UML (qui se limitera seulement aux diagrammes de classes, sequences/collaborations et peut etre le diagramme d'activités
 
Je peche (niveau technique) sur un procede qui pourrait etre interessant pour mon installer.
 
Mon installer se compose (au niveau GUI) d'une JFrame, d'un Panel pour le Header (Logo, Auteur, Date....) d'un Panel Footer (Boutons suivant, precedent, quitter...) et d'un Panel Central
 
Par action sur les boutons suivant, precedent.... le Panel Central est donc le seul a changer.  
 
Maintenant pour eviter de faire ça comme un porc et faire de la programmation niveau 6eme, j'avais une idée :
-> Via un fichier XML, je connais le nom des Panels existant et leur emplacement et leur numero de page (unique) qui seront ensuite integré dans la JFrame
 
Avec ce fichier XML, je sais donc ou trouver les Panels par leur noms et leur numero
 
Mais voila je me demandais si on pouvait pas pousser un peu la chose et là je demande aux experts Java si mon idee est sogrenue ou pas :
Au lieu de faire une classe par Panel, j'avais comme idée de faire 1 Classe unique qui, via un fichier XML par Panel, me permettrait de construire (a partir de ce fichier XML) la structure de chaque Panel et ensuite y mettre les données.
Pourquoi cette idee ? Je vais vous expliquer :
 
Si j'ai 10 Panels dans mon installer, je l'ai parcours 1 a 1.
Arrivé au 9eme Panel je me rend compte d'une erreur : il faut faire marche arriere.
Si je fais une classe par Panel je perd toutes les infos que j'avais obtenues de l'utilisateur.
Si je gere les Panels avec le XML, je peux a la validation d'un Panel ecrire les données de l'utilisateur en XML et, en revenant en arriere je pourrais donc reafficher les infos de l'utilisateur
 
Mais voila, est ce intelligent de proceder de cette façon ? Existe t-il une solution plus elegante ?
 
J'ai deja regardé un projet Java hyper compliqué. Je ne veux pas d'un truc hyper compliqué, mais pas un  truc pourri non plus :/

Reply

Marsh Posté le 28-08-2003 à 19:30:22   

Reply

Marsh Posté le 28-08-2003 à 19:52:31    

je ne vois pas l'interet de l'xml pour garder les infos entrées dans un panel précedent; a la "validation" d'un panel, tu stockes les données quelque part, oui, mais en xml ou pas, on s'en tape. si tu les stocke dans un "bete" objet, ça ira plus vite, stout.
 
maintenant pour décrire tes panels ça peut etre bien, d'autant que si tu veux que ton soft d'install soit souple, l'utilisateur doit pouvoir configurer les differents panels qu'il veut pour chaque etape de l'installation du soft qu'il installe.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 28-08-2003 à 19:58:00    

the real moins moins a écrit :

je ne vois pas l'interet de l'xml pour garder les infos entrées dans un panel précedent; a la "validation" d'un panel, tu stockes les données quelque part, oui, mais en xml ou pas, on s'en tape. si tu les stocke dans un "bete" objet, ça ira plus vite, stout.
 
maintenant pour décrire tes panels ça peut etre bien, d'autant que si tu veux que ton soft d'install soit souple, l'utilisateur doit pouvoir configurer les differents panels qu'il veut pour chaque etape de l'installation du soft qu'il installe.


 
Ok donc je garde l'idée sur le fichier XML contenant le nom, la position et une breve description du Panel.
 
Par contre je stock les données dans un objet (HashTable par exemple ou un Vecteur de Panel) pour pouvoir garder les infos.
 
 
Oki merci pour ton conseil. Si tu as autrechose à ajouter, n'hesites pas ;)

Reply

Marsh Posté le 28-08-2003 à 20:01:07    

samuelp a écrit :


 
Ok donc je garde l'idée sur le fichier XML contenant le nom, la position et une breve description du Panel.
 
Par contre je stock les données dans un objet (HashTable par exemple ou un Vecteur de Panel) pour pouvoir garder les infos.
 
 
Oki merci pour ton conseil. Si tu as autrechose à ajouter, n'hesites pas ;)

tu as vraiment besoin d'un objet synchronisé pour garder tes infos? :o
sinon, probablement pas necessaire de garder les instances de Panel, mais plutot les données qui ont été entrées dedans.
(à voir)
 
sinon pour la description des panneaux tu dois aussi je suppose prévoir un moyen de determiner "l'action" qui s'y passe (copie de fichiers, entrée d'informations, lecture d'un license, ...)
 
à priori je ferais differentes implementation d'une meme interface pour chacune de ces actions; apres dans ton fichier descripteur avec un attribut "type", par exemple, tu mappes chaque panel à une de ces implementations...  
(c ptet pas clair mais bon :o )


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 28-08-2003 à 20:54:20    

samuelp a écrit :


Si je fais une classe par Panel je perd toutes les infos que j'avais obtenues de l'utilisateur.


 
Euh pkoi?
Si tu t'arranges pour ne pas perdre la reference a tes panels (tu les stockes dans un tableau par ex), ils ne seront pas effaces.
 
Je proposerais donc le systeme suivant:
-Un tableau de panels (initialise a partir du XML si tu veux)
-Quand on appuie sur precedent ou suivant, tu choisis juste un autre tableau

Reply

Marsh Posté le 28-08-2003 à 20:54:33    

Faut garder les instances des Panels pour éviter d'avoir à les reconstruire. :o
 
Sinon tu pourrais avoir un objet qui gère une liste de Panels pour afficher celui qui est adéquat. Il recevrait ainsi les requêtes de chaque Action dont -- t'as parlée.
Si on suppose qu'il n'y a que trois boutons (précédent, suivant, quitter) dans le Panel Footer, chacune d'entre elles est associée à une Action. Celle affectée au bouton suivant varie suivant le Panel central en cours (chaque Panel en a donc un, comme l'a dit --), tandis que les deux autres sont fixes.


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
Reply

Marsh Posté le 29-08-2003 à 09:00:17    

Bonjour,
 
pour l'histoire du bouton suivant et de l'action engendrée par la validation d'un Panel central, j'ai pensé à un procédé, certes pas très propre, pour permettre de garder une certaine cohérence :
Ainsi, chaque Panel a dans ses attributs un parent qui represente le JFrame
 
Les Panel descendent d'abord d'une classe mere abstraite (qui descend de Panel) et cette classe mere possede une Methode isValid qui permettra de savoir si le bouton suivant doit etre validé.
 
Comme ça, je reimplemente la methode isValid selon le Panel et je pourrais faire suivant si et seulement si isValid est à True
 
qu'en pensez vous ?

Reply

Marsh Posté le 29-08-2003 à 09:28:47    

samuelp a écrit :

Ainsi, chaque Panel a dans ses attributs un parent qui represente le JFrame


Pourquoi faire ?
 

samuelp a écrit :

cette classe mere possede une Methode isValid qui permettra de savoir si le bouton suivant doit etre validé.


Plus simplement, tu as la méthode setEnabled() de la classe Action qui permet d'activer ou non le bouton auquel ton action est associée. Tu pourrais alors avoir à la place une méthode setValid() pour activer ou non le bouton.


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
Reply

Marsh Posté le 29-08-2003 à 18:10:59    

Krueger a écrit :


Pourquoi faire ?
 
 
Plus simplement, tu as la méthode setEnabled() de la classe Action qui permet d'activer ou non le bouton auquel ton action est associée. Tu pourrais alors avoir à la place une méthode setValid() pour activer ou non le bouton.


Y a des trucs qui m'echappent :/
 
Tout d'abord, je veux garder uen instance de la Frame (parent) pour pouvoir, via le Panel et selon l'action que l'on lui fait faire, pouvoir jouer sur le bouton next  du Panel Footer via une methode de la Frame
 
En gros dans le constructeur du Panel je fais
public monPanel(JFrame parent, Datas datas)
{
this.parentFrame = parent ;
}
 
Comme ça, a partir de l'action sur un Panel si besoin est je fais :
this.parent.setButtonPanelFooter(true) ;
 
ça se gere assez facilement
 
Concernant la classe action et le setEnable je n'ai pas compris :/
Qu'est ce que la classe action ?
 
J'ai repensé à la solution de -- :
Si j'implemente une interface pour chaque Panel, avec dans cette interface 1 ou 2 methodes.
Je pourrais alors via cette interface implementer ces methodes et connaitre la validité du Panel (isValid, validate) et grace à cela faire un this.parent.setButtonPanelFooter(true)
 
Je sais que cela n'est pas une solution tres propre mais je ne vois pas comment faire autrechose. Si on pouvait m'expliquer une methode plus propre de maniere bien imagée je pourrais comprende :/ (Ben oui, je suis pas le Paul Allen ou le Linus Torvald de la prog :/ )

Reply

Marsh Posté le 29-08-2003 à 18:14:05    

à mon avis, déjà, tu dois bien séparer les valeurs et autres données des ecrans des écrans eux-memes
(ie stocker tout ça dans un bean et pas "betement" dans les JTextField et autres)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 29-08-2003 à 18:14:05   

Reply

Marsh Posté le 29-08-2003 à 19:36:30    

the real moins moins a écrit :

à mon avis, déjà, tu dois bien séparer les valeurs et autres données des ecrans des écrans eux-memes
(ie stocker tout ça dans un bean et pas "betement" dans les JTextField et autres)


je viens tout juste de lire le topic en entier. Et je pense que -- a mit le doigt sur le truc que tu avais pas capté : tu dois séparer les données de leur présentation.
 
 
1) Tu veux récupérer des données utilisateurs. Il te faut donc un (ou plusieurs) objets pour récupérer ces données :
-> ex : un (ou des) javabean UserData avec comme attributs userName, userCompany, serial, instalationDirectory, etc ...
 
2) Tu veux faire plusieurs des écrans qui te permettent de récupérer ces données (-> interface UserDataScreen). Chacun de ses écrans peut être assez différent (=> création de plusieurs classes implémentant UserDataScreen).  
Chacun de ces écran permetra de recueillir des informations. Ces informations seront sauvegarder dans le javabean => il faut passer l'instance du javabean UserData à chacun des UserDataScreen.
 


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 30-08-2003 à 11:08:29    

Merci pour toutes ces infos.  
Je vais essayer de m'en sortir avec.
Je tiens a signaler que cet Installer sera en Open Source et hebergé certainement sur SourceForge (savannah refusant d 'heberger des projets en Java utilisant SWING), donc a l'occasion si j'ai fait une bourde vous pourrez directement me conseiller sur le code, voir le modifier.
 
a+

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed