IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mon programme Discussion :

[Java]librairie pour la construction de Wizard


Sujet :

Mon programme

  1. #21
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Genial!

    Je vais essayer d'avancer ce soir sur AWL pour te montrer ce que l'on peut faire avec XUIL. Tu utilises Eclipse comme IDE ou Netbeans? Parce que comme je t'ai dit il n'y a pas de distribution XUIL, il n'y a que les sources et pour tester ce que je vais faire, il faudrait que tu recupereres les source de SVN qui sont stockés dans plusieurs projet Eclipse (tu verras y en a beacoup) qui font reference les uns les autres.

    Paramètres SVN : voir ici

    Il fuadra que tu recuperes tous les projets qui sont dans akrogen/org.akrogen.xuil/trunk/.

    Pour voir les sources en lignes, c'est ici.

    J'ai deja archive le debut du projet XUIL/AWL qui est une implementation AWL pour les wizards gere en XUIL comme ce que j'ai fait en SWT.

    Si tu as Eclipses et Subversion, c cool, sinon faudra voir comment on peu faire.

    Angelo

  2. #22
    Membre averti Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Points : 414
    Points
    414
    Par défaut
    j'utilise netbeans et subversion. mais je peux toujours utiliser eclipse : je vais juste un peu galérer.
    auteur de Awl (http://awl-wizard.sourceforge.net), librairie de développement d'assistant en Java.
    auteur de Blackdog (http://www.blackdog-project.org), lecteur/gestionnaire audio en Java.

  3. #23
    Membre averti Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Points : 414
    Points
    414
    Par défaut
    juste pour information, dans quel cadre tu travailles sur akrogen? projet personnel ou investissement d'une société pour un projet open-source?
    auteur de Awl (http://awl-wizard.sourceforge.net), librairie de développement d'assistant en Java.
    auteur de Blackdog (http://www.blackdog-project.org), lecteur/gestionnaire audio en Java.

  4. #24
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    j'utilise netbeans et subversion. mais je peux toujours utiliser eclipse : je vais juste un peu galérer.
    Ok. Je pense que le plus simple c'est effectivement d'utiliser Eclipse dans un premier temps. Je tenterai de tout t'expliquer comment faire. Une fois qu'il y aurra une distribution ca sera plus simple pour utiliser Netbeans.

    juste pour information, dans quel cadre tu travailles sur akrogen? projet personnel ou investissement d'une société pour un projet open-source?
    C'est un projet personnel que j'ai demarre depuis mars 2006 ou je bosse soit chez moi (tard le soir) soit chez le client (quand Akrogen l'interesse je leur ecrit des catalogues de generation pour leur code et comme ca je gagne plein de temps et je peux avancer sur Akrogen ).

    Je suis assez paresseux et developper des formulaires de CRUD par exemple, c'est interessant au debut quand tu ne connais pas la techno, mais apres c'est toujours la meme chose. A l'epoque j'avais cherche un generateur de DAO et Struts, mais je n'ai rien trouve de concluant.

    Le probleme avec les generateur que j'avais trouve, c'est que c'est difficile d'avoir la main sur le code genere (si c un plugin) et ca genere en masse le code alors qu'au cours du dev on ne veut que generer un formulaire. De plus quand on developpe un formulaire on veut personnaliser le nom de la classe du package...

    Voila pourquoi j'ai cree Akrogen. Je l'ai developpe seul, mais petit a petit des personnes m'aident pour ecrire les catalogues Akrogen qui deviennent de plus en plus diversifie (JPA, EJB2, Struts...).

    De temps en temps des personnes m'ecrivent pour avoir de nouvelles fonctionnalites. Et Akrogen est apperement utilise pour generer du C++ (un framework proprietaire) et quelq'un est en train de l'etudier pour generer du code JMonkey.

    Je passe mon temps a rechercher des personnes pour que l'on m'aide et que l'on me fasse des retours sur Akrogen afin qu'il plaise a plus de monde possible. C'est tres difficile de trouver des gens motives et qui ont envie de s'investir dans Akrogen. Donc quand je trouve une personne susceptible d'etere motive, je ne la lache pas.

    Akrogen est en moyenne a 10/20 telechargements par jour et j'aimerais bien que ca decolle un peu plus.

    J'essaie de faire connaitre Akrogen comme je peux (le mois dernier j'ai eu la chance d'avoir une actualité dans le magazine "Programmez", je suis ravi).

    Un professionnel m'a dit que Akrogen etait tres intéressant, mais que "je n'etais pas dans l'air du temps". Ca ca calme mais bon.

    Bon j'arrete de m'enflammeret merci pour tout.

    Angelo

  5. #25
    Membre averti Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Points : 414
    Points
    414
    Par défaut
    la version 1.0.0 pour java 1.4 est disponible.
    auteur de Awl (http://awl-wizard.sourceforge.net), librairie de développement d'assistant en Java.
    auteur de Blackdog (http://www.blackdog-project.org), lecteur/gestionnaire audio en Java.

  6. #26
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Bonjour,
    Merci! Je viens de la tester sur mon poset avec Java 1.4 et ca marche nickel.
    J'ai avance de mon coté et la j'arrive a afficher la description XML/XUL dans plusieurs pages en utilisant AWL.

    Par contre au niveau du rendu c'est pas encore bien finalise car les JButton, JTextComponent, JTable... sont ceus par defaut de Swing et je trouve qu'ils sont gros a mon gout. En d'autres termes, il faut resizer le wizard pour voir tout le contenu de la page. Faut voir comment je peux reduire la taille de ces widgets en ensuite voir si c'est possible que AWL resize le wizard comme il faut (en SWT ca se comporte comme ca).

    Voici mes remarques :

    • classe Wizard : j'ai etendu ta classe Wizard avec la classe XuilWizard.
      • methode addPage : je l'ai developpe moi meme, mais je pense que ca serait bien que AWL propose cette methode. Elle met a jour les id avec setNextDescriptorId et setPreviousDescriptorId.
      • constructeur Wizard : ca serait bien qu'elle attende le parametre WizardController pour lui passer un WizardController au lieu de passer par le setter (ca evite d'instancier un WizardController).
    • WizardController : j'ai du etendre WizardController avec la classe XuilWizardController
      pour gerer le onShow sur le WizardPage (j'ai pas fini, il faut appeler le onShow sur les boutons next et previous). Apres je vais mettre aussi le onHide.
      Peut etre que ca serait interessant d'avoir ces methodes dans le core de AWL?
    • classe WizardPage : j'ai etendu WizardPage dans la classe XuilWizardPage
      et j'ai ajoute la methode getWizard. Peut etre que ca serait interessant d'avoir cette methode dans le core de AWL?


    Il ya aussi une fonctionnalite qui je pense peut etre bien (j'en ai besoin et c'est integre au wizard SWT en natif) est la gestion d'erreur, autrement dit faire un panel en haut du wizard qui affiche les messages (en INFO, ERROR, WARN), en mettant un icone. Lorsqu'il y a un message d'erreur, ca grise le bouton Next et Finish.

    Voici le code que j'ai en SWT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    public void setInfoMessage(String message) {
    		super.setErrorMessage(null);
    		super.setMessage(message, IMessageProvider.INFORMATION);
    		super.setPageComplete(true);
    	}
    
    	public void setWarnMessage(String message) {
    		super.setMessage(message, IMessageProvider.WARNING);
    		super.setPageComplete(true);
    	}
    
    	public void setErrorMessage(String message) {
    		super.setErrorMessage(message);
    		super.setPageComplete(message == null);
    	}
    
    	public void resetMessage() {
    		super.setErrorMessage(null);
    		super.setMessage(null, IMessageProvider.INFORMATION);
    		super.setPageComplete(true);
    	}
    super correspond a la classe native SWT Wizard. Moi apres j'ai defini les methodes setInfoMessage,...

    Donc pour resumer, ca serait bien d'avoir :

    1. une methoe setMessage : qui attend une String (message) et un niveau d'erreur (qui pilote l'icone).
    2. une methode setPageComplete : qui si elle est a true degrise les boutons Next et Finish et les grise si elle est a false.


    En SWT il y a un niveau des messages, autrement dit si tu affiches un messages d'erreur, puis un message d'information, le message d'information ne s'affiche pas, seul le message d'erreur s'affiche. Si tu supprimme le messag ed'erreur en faisant (super.setErrorMessage(null)), le message d'erreur est supprime, et le message d'information s'affiche.

    Ces messages s'affichent en haut du wizard. Si tu trouves l'idee bonne et que ca peut etre integre a AWL, c cool, sinon je ferais ma sauce a moi, si tu trouves que c trop specifique.

    Pour mieux comprendre tout ce que je t'ai dit, je t'ai mis les captures d'ecran des wizard en SWT et AWL qui interprete les memes Wizard Pages decrits en XUL.

    Comme tu peux voir dans le SWT, il y a en haut un message d'erreur (Package is required). Cetet logique est gere en javascript. En fait il y a une methode validate sur le oninput du champs XUL qui verifie que le champs est rempli. Dans ce cas il n'est pas rempli donc j'appelle en Javascript la methode

    wizard.setErrorMessage('Package is required!').

    J'espere que tu aurras compris mes explications et desole pour ce post si long.

    Angelo
    Images attachées Images attachées     

  7. #27
    Membre averti Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Points : 414
    Points
    414
    Par défaut
    salut,

    methode addPage : je l'ai developpe moi meme, mais je pense que ca serait bien que AWL propose cette methode. Elle met a jour les id avec setNextDescriptorId et setPreviousDescriptorId.
    J'avais déjà dans l'idée d'ajouter une méthode permettant de simplifier l'initialisation d'une page en terme d'id, next id, previous id, donc OK.

    constructeur Wizard : ca serait bien qu'elle attende le parametre WizardController pour lui passer un WizardController au lieu de passer par le setter (ca evite d'instancier un WizardController).
    OK.

    WizardController : j'ai du etendre WizardController avec la classe XuilWizardController
    pour gerer le onShow sur le WizardPage (j'ai pas fini, il faut appeler le onShow sur les boutons next et previous). Apres je vais mettre aussi le onHide.
    Peut etre que ca serait interessant d'avoir ces methodes dans le core de AWL?
    J'imagine que tu veux faire des choses quand une page devient visible. tu as déjà les méthodes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void aboutToDisplayPanel(Wizard wizard);
    &
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void aboutToHidePanel(Wizard wizard);
    au niveau d'un WizardPageDescriptor.

    classe WizardPage : j'ai etendu WizardPage dans la classe XuilWizardPage
    et j'ai ajoute la methode getWizard. Peut etre que ca serait interessant d'avoir cette methode dans le core de AWL?
    Ca, par contre, ca m'embete un peu dans le sens ou les descripteurs de pages sont avant tout des éléments stockés coté modèle, alors, effectivement, de toute façon, un descripteur est déjà responsable de la création du composant représentant la page, mais ca me gêne qu'on puisse dans un descripteur avoir une association avec le Wizard.

    Il ya aussi une fonctionnalite qui je pense peut etre bien (j'en ai besoin et c'est integre au wizard SWT en natif) est la gestion d'erreur, autrement dit faire un panel en haut du wizard qui affiche les messages (en INFO, ERROR, WARN), en mettant un icone. Lorsqu'il y a un message d'erreur, ca grise le bouton Next et Finish.
    Il existe déjà une méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void displayMessage(String message)
    qui permet d'afficher un JPopupMenu dans le bas du wizard. Aujourd'hui, cette fonctionnalité n'est utilisé que dans le cadre d'exceptino rencontré lors de la navigation vers la page suivante ou la page précédente. Ca peut valoir le coup d'intégrer une gestion d'erreur dans Awl.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qui si elle est a true degrise les boutons Next et Finish et les grise si elle est a false.
    Il existe aussi la notion d'autorisation de navigation sur un descripteur de page qui permet d'autoriser ou non l'appui sur next, prev, finish et cancel.

    Autre idée qui peut t'intéresser :
    • ajouter une notion d'aide sur un descripteur + bouton dans le wizard qui permettrait d'affiche une boite de dialogue avec l'aide.

    Quoiqu'il en soit, merci pour ces remarques.
    Les vacances arrivant et n'étant pas là pendant quelques jours, je vais essayer d'en faire un maximum et je mettrai une nouvelle version 1.4 dès ce soir. Pendant mes congés, je pourrais répondre si tu as des questions mais j'aurais guère l'occasion de faire du développpement. ( ca durera que jusqu'au 2 janvier ).
    auteur de Awl (http://awl-wizard.sourceforge.net), librairie de développement d'assistant en Java.
    auteur de Blackdog (http://www.blackdog-project.org), lecteur/gestionnaire audio en Java.

  8. #28
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Merci beaucoup de tes remarques je vais continuer a avancer de mon coté.

    Les vacances arrivant et n'étant pas là pendant quelques jours, je vais essayer d'en faire un maximum et je mettrai une nouvelle version 1.4 dès ce soir. Pendant mes congés, je pourrais répondre si tu as des questions mais j'aurais guère l'occasion de faire du développpement. ( ca durera que jusqu'au 2 janvier ).
    Pas de souci, profites bien de tes vacances. De mon coté je ne serais pas bloqué car j'ai plein de choses a faire. Si jamais je le suis, je te poserais les questiosn par mail. Si tu ne reponds pas tout de suite c pas grave.

    Angelo

  9. #29
    Membre averti Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Points : 414
    Points
    414
    Par défaut
    bon, j'ai fait pas mal de modifications ce soir.
    • ajout de la méthode addPage sur un Wizard.
    • correction du constructeur de la classe Wizard pour ne pas créer de controller inutilement.
    • J'ai ajouté la notion de messages dans les descripteurs de page.
    • ajout de la notion de bandeau d'entête d'un wizard (comme le fait l'api d'eclipse, là ou il affiche les messages) --> WizardHeader.
    • correction des problèmes de pack() sur le wizard qui lui donnait une taille incohérente.
    • Découpage de la classe Wizard en ... Wizard et DefaultWizard. il faudra désormais que tes surcharges de Wizard héritent de Defaultwizard. cette modification permet en théorie de pouvoir placer le panneau de bouton, les pages où on le souhaite à partir du moment que l'on hérite de Wizard.
    Beaucoup trop de modifs ce soir pour que je puisse t'assurer que je n'ai pas introduit quelques merdes. Quoiqu'il en soit, si ca te permet de tester et de 'valider' tes besoins, tant mieux.
    J'ai ajouter le jar en version 1.4 et les sources en version 1.1.0-rc1.

    Si tu as eu l'occasion de lancer le jar via java -jar awl.., tu trouveras avec les deux derniers 'tests' des essais pour rendre le rendu graphique proche des wizards d'eclipse.
    Pour un DefaultWizard, le sommaire est visible par défaut (comme avant), par contre, concernant le WizardHeader, celui si n'est activé que si tu lui en as associé un.
    Voilà, désolé d'être aussi brouillon... J'attends avec quand même pas mal d'impatience tes remarques...

    bon week-end.
    auteur de Awl (http://awl-wizard.sourceforge.net), librairie de développement d'assistant en Java.
    auteur de Blackdog (http://www.blackdog-project.org), lecteur/gestionnaire audio en Java.

  10. #30
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Bonjour,
    Je n'ai qu'une chose à dire :Merci !!!! Je croies que ton projet te tiens a coeur et que tu as envie que l'on utilise vu ta motivation. Je connais tres bien ce sentiment .

    J'ai recupere ta nouvelle version et j'ai bien pu avancer. Je te mets une ptite copie d'ecran pour que tu voies le résultat. Tu pourras voir le message d'erreur affiche et les boutons Next et Finish grisés car il y a un message d'erreur.

    Concernant le niveau des messages j'ai vu que tu avais coder des trucs mais je n'ai pas encore tester (je te tiens au courant).

    Voici mes retours :

    • methode addPage :cette methode existe et je t'en remercie, mais ce qui serait bien c'est qu'elle gère aussi les ID next, previous. Si tu regardes le code de XuilWizard je l'ai géré (apres je ne sais pas si c'est très propre).
    • methode removePage : je pense que ca serait bien que cette méthode existe.
    • methode getFirstDescriptor, getLastDescriptor : je pense que ca serait bien que ces méthodes existent au meme titre que getCurrentDescriptor.
    • methode onShow : j'ai suivi tes instructions en utilisant la méthode
      aboutToDisplayPanel, mais le problème c'est que dans mon cas le onShow doit etre appele une fois que toutes les pages sont ajoutées au wizard. En effet lors de cet evenement je declenche des scripts qui sont definis dans la page XML/XUL. Un script de la page1 peut acceder en Javascript a la page2 pour mettre a jour un champs. Il faut donc que toutes les pages soient ajoutés au wizard avant de declencher les scripts definits dans la page, d'ou la methode onShow.
      Le problème avec aboutToDisplayPanel, c'est qu'elle est appelé pour la première page avant que le wizard soit actif (avant que toutes les pages soient ajoutées) . Pour les autres pages aboutToDisplayPanel convient tres bien, car a ce moment la le wizard est actif et toutes les pages ont ete ajoutées. J'ai reussi a gerer le onShow comme ceci :

      • pour la première page : avec la methode aboutToDisplayWizard() avec la classe XuilWizardController
      • pour les autres pages : avec la méthode aboutToDisplayPanel()
        dans la classe XuilWizardPage.
        Pour ne pas traiter la premiere page, le test wizard1.isActive()est effectué.


      Je ne sais pas si c'est la maniere la plus propre mais ca marche bien. Si tu veux integrer le onShow et onHide dans le core de AWL, je l'utiliserai, sinon je garde mon code.

    • gestion des boutons grises. J'ai fouille dans le code et j'ai vue qu'il y avait NavigationAuthorization. C'est ce que j'ai utilisé. La méthode setPageComplete de XuilWizardPage gere les boutons. Si c'est pas la bonne méthode, n'hesite pas a me le dire.


    Voila ou j'en suis, maintenant je vais gerer les niveaux de messages pour voir si ca se comporte comme SWT et apres je testerai les wizard dynamiques.

    Bonne vacances

    Angelo

  11. #31
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut Titre description wizard page + icones personnalisées
    Bonsoir,
    j'ai continué à avancer l'integration de XUIL avec AWL et j'aurrais besoin de plusieurs fonctionnalités. Je t'avoues que je n'ai pas pris le temps de regarder si c'etait possible de faire ou non avec AWL car j'essaie d'avancer aussi sur mon API XUIL. Desole si je pose des questions betes.

    Je t'ai mis une copie d'ecran de SWT pour que tu comprennes mieux mes besoins :

    • Titre wizard page dans le bandeau : afficher un titre dans la page du wizard (voir Wizard Page Title dans le bandeau du haut).
    • Titre wizard description dans le bandeau du haut : afficher une description dans la page du wizard (voir Wizard Page description dans le bandeau). J'ai vu qu'il y avait un setDescription mais il met a jour le Summary. Moi je souhaiterais enlever le summary (ca j'ai trouve en faisant setSummary(false) )et avoir une description au niveau du bandeau. Si un message est affiche (WARN, ERROR...) ca s'affiche par au dessus. Quand on fait resetMessages ca supprime le message et la description apparait.
    • Icones dans le footer : dans mon cas lorsque la page ets chargée il peut y avoir des erreurs de scripts. En SWT j'active un icone (en bas a gauche de la page) pour indiquer qu'il y a une erreur de script. Si l'utilisateur clique dessus ca ouvre une fenetre avec l'erreur du script.
      J'aimeras faire la meme chose et donc ajouter mon icone dans le footer du wizard page. J'ai vu que la methode initComponents creait les boutons je pense qu'il faudrait que j'utilise cette methode, le probleme c'est que je souhaiterais afficher mon icone(rouge) a gauche du wizard page. Comment pourrais je gerer ceci simplement? Peut faudrait il ajouter un CustomPanel dans AWL?
    • Button help : j'ai vu qu'il y avait un bouton help,mais help est private. Comment on l'active? Il sert a koi ce bouton?

      Dans Eclipse ce bouton help permet d'appeler un fichier topic XML qui permet d'afficher une aide. Je nel'ai pas implemente dans Akrogen mais j'ai l'intention de le faire. Sais tu si dans Netbeans tu as un equivalement de ces fichiers XML d'aide?


    Tu dois etre en vacances. J'attends tes reponses pour gerer ces fonctionnalites avec AWL et je vais m'attaquer au wizard page dynamique.

    Merci encore de ton aide.

    Angelo
    Images attachées Images attachées  

  12. #32
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut Problème avec appel methode addPage
    Bonjour,
    j'ai continue a avancer avec AWL et je suis face a un problème que je n'arrive pas a expliquer. J'ai trouvé une solution, mais je pense qu'elle n'est pas très propre.

    Voici mon explication (qui va surement etre longue). J'ai passer pas mal de temps a indentifier le problème et j'ai trouve un test qui pose probleme. Le problème vient de la methode addPage. Lorsque l'on execute ce code, ca marche tres bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    DefaultWizard w = new DefaultWizard((JFrame)null);
    
    // Page 1
    String pageId1 = "1";
    DefaultWizardPageDescriptor page1 = new DefaultWizardPageDescriptor();
    page1.setComponent(new JLabel("Page 1"));
    
    // Page 2
    String pageId2 = "2";
    DefaultWizardPageDescriptor page2 = new DefaultWizardPageDescriptor();
    page2.setComponent(new JLabel("Page 2"));
    page1.setNextDescriptorId(pageId2);
    page2.setPreviousDescriptorId(pageId1);
    
    // Ajout des pages au wizard
    w.addPage(page1, pageId1);
    w.addPage(page2, pageId2);
    
    w.pack();
    w.setVisible(true);
    Par contre dans mon cas j'ajoute les page au fur et a mesure car je ne connais pas les pages d'avances, ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    DefaultWizard w = new DefaultWizard((JFrame)null);
    
    // Page 1
    String pageId1 = "1";
    DefaultWizardPageDescriptor page1 = new DefaultWizardPageDescriptor();
    page1.setComponent(new JLabel("Page 1"));
    // Ajout de la page 1 au wizard
    w.addPage(page1, pageId1);
    
    // Page 2
    String pageId2 = "2";
    DefaultWizardPageDescriptor page2 = new DefaultWizardPageDescriptor();
    page2.setComponent(new JLabel("Page 2"));
    page2.setPreviousDescriptorId(pageId1);
    page1.setNextDescriptorId(pageId2);
    //Ajout de la page 2 au wizard
    w.addPage(page2, pageId2);
    
    w.pack();
    w.setVisible(true);
    Et la le problème c'est que le programme tourne en boucle mais n'affiche pas le wizzard. Lorsque je mets un point d'arret sur la ligne w.pack();, j'attends quelques secondes, je debloque le debug, le wizard s'affiche. Je n'arrive pas expliquer la raison de ce problème?

    J'ai reflechi au problème et la solution pour l'instant est de creer toutes les pages puis d'appeler addPage pour chacune des pages a la fin. Mais ou?
    Ce que j'ai fait c'est que j'ai defini une methode a moi addPage(IXuilWizardPage page) que j'utilise pour mettre a jour les id Next et Previous et qui au lieu d'appeler addPage de AWL stockes la page dans un ArrayList.

    Ensuite j'ai redefini pack du Wizard pour iterer sur cette liste et appeler les addPage AWL pour chaque page enregistre dans la liste. Le 2ème problème c'est que pack est appelé plusieurs fois. C'est la méthode resize du Wizard AWL qui l'appelle. Donc j'ai redefini resize en mettant un flag comme quoi elle a ete appelée et dans pack je test si cette methode a été appelée. Si elle n'a pas été appelé, cela signifie que l'on est dans le cas w.pack(); et j'itere sur la liste des pages en appelant addPage.

    Ce qui donne au niveau du code de mon Wizard :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    	private boolean resizeCalled;
    	
    	/**
    	 * Add Xuil wizard page.
    	 * 
    	 * @param xuilPage
    	 */
    	public void addPage(IXuilWizardPage xuilPage) {
    		// Register the wizard into the page.
    		XuilWizardPage page = (XuilWizardPage) xuilPage;
    		page.setWizard(this);
    
    		// Create page content described with XML.
    		Component content = page.createPageContents();
    		page.setComponent(content);
    
    		// Manage AWL next, previous ID.
    		if (lastWizardPageAdded != null) {
    			lastWizardPageAdded.setNextDescriptorId(page.getPageid());
    			page.setPreviousDescriptorId(lastWizardPageAdded.getPageid());
    		}
    		pages.add(page);
    		// Add AWL wizardpage.
    		//super.addPage(page, page.getPageid());
    		lastWizardPageAdded = page;
    	}
    	
    	public void pack() {
    		if (!resizeCalled ) {
    			for (Iterator iterator = pages.iterator(); iterator.hasNext();) {
    				XuilWizardPage page = (XuilWizardPage) iterator.next();
    				super.addPage(page, page.getPageid());
    			}
    		}
    		super.pack();
    	}
    	
    	protected void resize() {
    		resizeCalled = true;
    		super.resize();
    		resizeCalled = false;
    	}
    Pour l'instant ca marche, mais je trouve que c'est du bricolage. Si tu as une meilleure solution, n'hesite pas! Merci.

    Angelo

  13. #33
    Membre averti Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Points : 414
    Points
    414
    Par défaut
    salut,

    concernant le problème de blocage, je ne comprends pas encore pourquoi cela arrive dans le second cas et pas dans le premier. Il y a interblocage entre le thread principal et l'EDT. Une solution temporaire consiste à effectuer la création du wizard et les appels à pack() et setVisible(true) dans l'EDT (j'ai testé, ca fonctionne). Ce problème semble être apparu depuis que le sommaire est géré par un JEditorPane au lieu d'un simple JLabel.
    auteur de Awl (http://awl-wizard.sourceforge.net), librairie de développement d'assistant en Java.
    auteur de Blackdog (http://www.blackdog-project.org), lecteur/gestionnaire audio en Java.

  14. #34
    Membre averti Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Points : 414
    Points
    414
    Par défaut
    Voici les différentes modifications que j'ai effectuées :

    Un WizardPageDescriptor possède désormais un attribut title. le comportement dans le sommaire reste le même, on utilise comme libellé de la page le titre s'il est renseigné, sinon, on considère la description, sinon "unknown". Cette modification permet d'étoffer un peu plus le bandeau et ajoutant un label affichant le titre de la page courante.(en pièce jointe, une image représentant ce que ca peut donner). Aujourd'hui, j'ai fait en sorte que si un message est affiché, la description est toujours visible. à voir si cela te convient ou si ce que tu voulais, cacher la description si un message est affiché, te convient mieux.

    Les méthodes getFirstDescriptor & getLastDescriptor ont été ajoutées au niveau du modèle.

    J'ai laissé l'aide en suspens pour le moment, on verra lors de l'intégration dans netbeans.

    Modification également du coté de la gestion des appels à aboutToDisplayPanel et consort qui devrait corriger ton problème.

    La nouvelle version est dispo comme d'hab.

    xixi31.
    Images attachées Images attachées  
    auteur de Awl (http://awl-wizard.sourceforge.net), librairie de développement d'assistant en Java.
    auteur de Blackdog (http://www.blackdog-project.org), lecteur/gestionnaire audio en Java.

  15. #35
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Bonjour,
    Merci de ta réactivité. J'ai tenté de tester la dernière version mais malheursement j'ai plein de problèmes :

    1. le problème du blocage est un point bloquant. J'avais réussi a le contrer (voir mes explications ci dessus) mais avec la nouvelel version ca ne marche plus. Je suis obligé de mettre un point d'arret sur la ligne wizrad.pack(); (et des fois ca ne marche pas). Je n'ai pas bien compris ton explication avec EDT (c'est quoi EDT?).

    2. title. C'est exactement ce qu'il me fallait. Le problème c'est que ca marche bien si j'appelle setTitle dans le constructeur. Par contre si j'appelle setTitle dans la methode aboutToDisplayPanel, ca ne marche pas.

    3. En SWT lorsqu'il ya un message d'erreur, info, warn, celui ci cache la description et title. Ce qui fait joli (mais bon c pas le plus important), c'est que le message apparait avec un scroll (du bas vers le haut) et disparait aussi avec un scroll (haut vers le bas). Je pense que le message devrait cacher la description pour ne pas surcharger les infos. Apres c'est juste mon avis.

    Je n'ai pas tester les méthodes getFirstDescriptor & getLastDescriptor. aboutToDisplayPanel semble marcher mais il faudra que je reteste lorsque le problème du blocage sera reglé.

    Pour l'instant je suis un peu bloqué et je croies qu'il n'y a pas les sources de AWL donc désolé de ne pas être plus précis que ca.

    Concernant mon projet, je viens de créer un projet sourceforge TkUI (Tookit for User Interface) ou Akrogen se basera dessus. Le projet est en cours de validation sur sourceforge. Je mettrais la doc (pour l'instant tres maigre) et les distributions de TkUI pour que tu puisses tester le resultat avec AWL.
    Quand ca sera fait, je pense que ca sera plus simple pour toi et moi de corriger les problèmes.

    Merci encore.

    Angelo

  16. #36
    Membre averti Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Points : 414
    Points
    414
    Par défaut
    Bonjour,

    Au sujet du blocage, L'EDT, Event dispach Thread, est en interblocage avec le thread ayant effectué la méthode main(String[]).
    Une des solutions temporaires que j'ai trouvé hier consiste à t'assurer que la création et l'affichage du wizard se font dans l'EDT, le thread Swing où doivent en théorie s'effectuer toutes les actions sur les composants graphiques. Pour cela, essaie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
        Runnable runnable = new Runnable()
        {
            public void run()
            {
                DefaultWizard w = new DefaultWizard((JFrame)null);
                // Page 1
                String pageId1 = "1";
                DefaultWizardPageDescriptor page1 = new DefaultWizardPageDescriptor();
                page1.setComponent(new JLabel("Page 1"));
                // Ajout de la page 1 au wizard
                w.addPage(page1, pageId1);
                
                // Page 2
                String pageId2 = "2";
                DefaultWizardPageDescriptor page2 = new DefaultWizardPageDescriptor();
                page2.setComponent(new JLabel("Page 2"));
                page2.setPreviousDescriptorId(pageId1);
                page1.setNextDescriptorId(pageId2);
                //Ajout de la page 2 au wizard
                w.addPage(page2, pageId2);
                
                w.pack();
                w.setVisible(true);
            }
        };
        
        if ( SwingUtilities.isEventDispatchThread() )
        {
            runnable.run();
        }
        else
        {
            SwingUtilities.invokeLater(runnable);
        }
    2. title. C'est exactement ce qu'il me fallait. Le problème c'est que ca marche bien si j'appelle setTitle dans le constructeur. Par contre si j'appelle setTitle dans la methode aboutToDisplayPanel, ca ne marche pas.
    Je dois bien avouer que j'ai fait qu'un minimum de test sur ce point. Tu dis qu'en gros, les éléments du bandeau ne sont pas remis à jour lorsque tu changes le titre d'une page?

    3. En SWT lorsqu'il ya un message d'erreur, info, warn, celui ci cache la description et title. Ce qui fait joli (mais bon c pas le plus important), c'est que le message apparait avec un scroll (du bas vers le haut) et disparait aussi avec un scroll (haut vers le bas). Je pense que le message devrait cacher la description pour ne pas surcharger les infos. Apres c'est juste mon avis.
    Il faut que je regarde pour le coup du scroll. Ok pour cacher la description lorsqu'un message apparait.

    Concernant mon projet, je viens de créer un projet sourceforge TkUI (Tookit for User Interface) ou Akrogen se basera dessus. Le projet est en cours de validation sur sourceforge. Je mettrais la doc (pour l'instant tres maigre) et les distributions de TkUI pour que tu puisses tester le resultat avec AWL.
    Quand ca sera fait, je pense que ca sera plus simple pour toi et moi de corriger les problèmes.
    Oui, effectivement, les modifs à flux tendus commencent à nuire un peu. Désolé pour ces problèmes.

    xixi.
    auteur de Awl (http://awl-wizard.sourceforge.net), librairie de développement d'assistant en Java.
    auteur de Blackdog (http://www.blackdog-project.org), lecteur/gestionnaire audio en Java.

  17. #37
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Au sujet du blocage, L'EDT, Event dispach Thread, est en interblocage avec le thread ayant effectué la méthode main(String[]).
    Une des solutions temporaires que j'ai trouvé hier consiste à t'assurer que la création et l'affichage du wizard se font dans l'EDT, le thread Swing où doivent en théorie s'effectuer toutes les actions sur les composants graphiques.
    Merci pour l'explication je ne connaissais pas. J'ai teste avec ton code et dans mon cas ca marche tres bien.

    Je dois bien avouer que j'ai fait qu'un minimum de test sur ce point. Tu dis qu'en gros, les éléments du bandeau ne sont pas remis à jour lorsque tu changes le titre d'une page?
    T'inquites pas t'as pas a te justifier. Oui le problème est que le titre n'est pas mis a jour. Dans mon cas j'ai ecrit un wizard page XUL ou il y a un bouton qui met a jour le titre, mais ca ne marche pas. J'ai fait des tests et quand je mets en dur le titre dans la methode aboutToDisplayPanel, ca ne marche pas non plus.

    Il faut que je regarde pour le coup du scroll. Ok pour cacher la description lorsqu'un message apparait.
    Ca c'est un gadget mais ca fait bien pro. Mais bon je pense que c'est pas le plus important. Content qu etu soies d'accord de cacher la description (et le titre aussi si c'est possible pour voir tout le message et qu'il ne soit pas coupé dans le cas ou le message est long).

    Oui, effectivement, les modifs à flux tendus commencent à nuire un peu. Désolé pour ces problèmes.
    T'inquite pas, c'etait pas une criqtique que je te faisais. Je connais cette situation. Il faut que je me bouge d emon cote pour faire aussi une version a peu pres stable de TkUI. Et je pense que ca bougera encore pas mal.

    Angelo

  18. #38
    Membre averti Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Points : 414
    Points
    414
    Par défaut
    Bonjour,

    Je te tiens au courant des dernières modifications même si ce n'est pas disponible pour le moment sur sourceforge :

    1.
    title. C'est exactement ce qu'il me fallait. Le problème c'est que ca marche bien si j'appelle setTitle dans le constructeur. Par contre si j'appelle setTitle dans la methode aboutToDisplayPanel, ca ne marche pas.
    Ce problème est corrigé.

    2. j'ai modifié la partie concernant le header de manière à pouvoir construire son propre header. Il y a du renommage de classe (comme WizardHeaderPanel en WizardHeader...). J'expliquerai les modifs plus tard lorsque la nouvelle version sera dispo.

    3. Je suis actuellement en train de travailler sur un header de type Eclipse qui permettra de voir les messages par l'animation dont tu m'as parlée. Je ne pense donc pas que ce soit nécessaire que je rende 'libellé' et 'description' inivisible dans le bandeau lorsqu'un message apparait.
    auteur de Awl (http://awl-wizard.sourceforge.net), librairie de développement d'assistant en Java.
    auteur de Blackdog (http://www.blackdog-project.org), lecteur/gestionnaire audio en Java.

  19. #39
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Bonjour,

    ok super j'attends la nouvelle version avec impatience.
    Concernant le bandeau qui scrolle, c'est exactement comme ca que Eclipse fonctionne. Il n'y a donc pas besoin de cacher le titre ou la description car le bandeau avec message scrolle du bst vers le haut et cache le titre et la description.

    Angelo

  20. #40
    Membre averti Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Points : 414
    Points
    414
    Par défaut
    Tout à fait. En fait, il va y avoir une implémentation de bandeau standard qui comme aujourd'hui affichera les messages en dessous du titre et de la description sans les rendre invisible et l'implémentation type 'Eclipse'...
    auteur de Awl (http://awl-wizard.sourceforge.net), librairie de développement d'assistant en Java.
    auteur de Blackdog (http://www.blackdog-project.org), lecteur/gestionnaire audio en Java.

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/10/2011, 11h46
  2. les librairies pour gerer et manipuler les graphes en Java
    Par juveto dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 08/04/2009, 14h46
  3. [JAVA] Quel EDI JAVA choisir pour Mac OS X ?
    Par didi dans le forum Développement OS X
    Réponses: 18
    Dernier message: 29/09/2007, 22h07
  4. Recherche librairies pour les images
    Par mathieu_t dans le forum Bibliothèques
    Réponses: 3
    Dernier message: 16/08/2004, 21h14
  5. [debutant] correspondance JAVA C++ pour pointeur de fonction
    Par davidoff_tls dans le forum Langage
    Réponses: 7
    Dernier message: 15/04/2004, 09h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo