Bonjour ,
Je voudrais afficher un menu dynamique à partir d'un fichier xml et je ne sais pas comment. Merci d'avance pour votre aide.
Bonjour ,
Je voudrais afficher un menu dynamique à partir d'un fichier xml et je ne sais pas comment. Merci d'avance pour votre aide.
Salut,
Dans une application WEB, ou un client desktop (en SWING, JavaFX ou SWT ?) ?
Le principe c'est de lire le fichier xml, avec un parser XML (par exemple JDOM2). Puis de créer le menu à partir des informations lues dans le XML. Et la façon de le faire dépend de quel type d'interface tu voudrais mettre en place.
La base pour créer des menus en SWING est dans ce tutoriel : Ajouter une barre de menu à votre fenêtre.
Parcourir une liste d'éléments xml qui définissent un nom et éventuellement une icône pour créer autant de JMenuItem (ou JMenu pour les sous menu) n'est pas la partie la plus complexe. Un menu n'a d’intérêt que s'il fait une action.
Pour avoir déjà fait ce genre de chose, je dirais que tu as 4 orientations possibles :
- La première est très limitée et peu évolutive, mais très simple à programmer (un switch, ou une Map<String, javax.swing.Action>), du moins sans écrire du code à chaque évolution : dans l'élément qui définit une entrée de menu, on met un attribut id dont la valeur désigne l'action qu'on veut faire. Par exemple on peut avoir
Le code qui contruit les menus sait interpréter les id pour déterminer quelle action mettre sur le menu.
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part <menu nom="Quitter" id="application.exit"/>
- Le xml contient une information d'identifiant d'action sous forme de nom de classe qui implémente javax.swing.Action (ou qui étend java.swing.AbstractAction)
On instancie les classes d'action par réflexion lors de la constitution du menu. En fonction de la complexité et des fonctionnalités de ton menu (je pense en particulier aux problématiques de cacher un menu, ou de le rendre inactif, de faire dépendre un menu du contexte de sélection, etc...), on peut décorréler l'action de ce quel fait, on introduisant un ou plusieurs niveaux de classes (handler, command, etc...), mais commence par faire ça avec des actions à un niveau, c'est le plus simple. En allant plus loin dans la complexité, on peut même introduire dans le xml les conditions qui gère l'activation ou la visibilité de l'action, ou la sélection (pour les actions de type toggle).- Mélanger les 2 précédents système
- Certaines actions standards sont identifiées par un identifiant que l'application définit
- On peut toujours ajouter des actions en ajoutant juste des classes d'action et en modifiant le xml
- Les actions sont écrites en Javascript directement dans le XML(Avec Nashorn, on peut exécuter du javascript dans java très facilement). Ce mode peut bien entendu être combiné avec le 1 et le 2 (tu peux ajouter un attribut dans le xml qui dit lequel des trois types est utilisé dans l'élément pour décrire l'action)
Sache également qu'il existe des systèmes qui utilisent déjà du xml pour paramétrer des menus : si ton besoin est limité, tu peux te faire ton propre système, mais s'il est complexe, il peut être avantageux d'utiliser des systèmes déjà tout faits (je pense en particulier à Eclipse RCP, ou NetBeans RCP).
Partager