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

Interfaces Graphiques en Java Discussion :

IHM paramétrable à partir d'un fichier texte


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    145
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations forums :
    Inscription : Septembre 2008
    Messages : 145
    Par défaut IHM paramétrable à partir d'un fichier texte
    Bonjour,

    J'aimerai créer un fichier texte qui comporte des éléments comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CreerBouton(x,y,taille,couleur, image de fond, etc.)
    CreerDialogue(x, y, etc.)
    etc.

    Pour créer une interface personnalisable et paramétrable.

    Concevoir un programme qui permette de lire ce fichier texte pour créer cette IHM comme j'en ai envie. Est-il possible de faire cela en JAVA et si oui pouvez-vous me donner des pistes (liens, fonctions,) ? Peut être que ma demande a déjà été traité ?

    Merci d'avance
    Cordialement

    GREG

  2. #2
    Membre éclairé Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Par défaut
    Je pense que ça doit être possible, mais déjà, plutôt qu'un fichier texte, choisi un fichier xml, qui a l'avantage d'être un fichier texte facilement lisible par la machine et par toi-même.

    Tu peux avoir davantage de précisions en allant voir ici

    Chaque balise peut contenir un élément graphique à afficher.
    Lors de la lecture, tu implémentes toutes tes méthodes, et lorsque celle-ci est terminée, tu mets un setVisible(true) sur ta JFrame si tu programmes en Swing.

    Bon courage :-)

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    145
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations forums :
    Inscription : Septembre 2008
    Messages : 145
    Par défaut complément
    Merci Balbuzard pour le XML tu as raison. Par contre je n'ai pas bien compris ton message

    "Lors de la lecture, tu implémentes toutes tes méthodes... "

    tu peux m'en dire un peu plus ?

    )
    Greg

  4. #4
    Membre expérimenté Avatar de welcome_59
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 203
    Par défaut
    Effectivement, un fichier xml serait probablement meilleur qu'un simple fichier texte.
    Une autre solution est de créer un objet que tu sérialises.

  5. #5
    Membre éclairé Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Par défaut
    Je voulais parler de ces méthodes-là :
    CreerBouton(x,y,taille,couleur, image de fond, etc.)
    CreerDialogue(x, y, etc.)
    etc.
    Tu peux parcourir ton fichier xml qui se présente comme un arbre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <IHM>
         <FENETRE name="..." title="..."/FENETRE>
         <BOUTON name="bouton1" actionCommand="start" height="34" weight="2"/BOUTON>
         <BOUTON..../BOUTON>
    </IHM>
    Tu peux parcourir ton fichier, et chaque arguement serait les arguments dont tes méthodes ont besoin pour fonctionner

  6. #6
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Par défaut
    Salut,

    Tu peut aussi utiliser un ResourceBundle et un fichier properties, c'est moins lourd à mettre en place que de définir un fichier XML.

    par exemple avec la classe Messages :
    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
    import java.awt.Color;
    import java.util.MissingResourceException;
    import java.util.ResourceBundle;
     
    public class Messages {
    	private static final String BUNDLE_NAME = "messages"; 
     
    	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
    			.getBundle(BUNDLE_NAME);
     
    	private Messages() {
    	}
     
    	public static String getString(String key) {
    		try {
    			return RESOURCE_BUNDLE.getString(key);
    		} catch (MissingResourceException e) {
    			return '!' + key + '!';
    		}
    	}
     
    	public static Color getColor(String key) {
    		try {
    			String obj = RESOURCE_BUNDLE.getString(key);
    			return Color.decode(obj);
    		} catch (MissingResourceException e) {
    			System.err.println('!' + key + '!');
    			return null;
    		}
    	}
    }
    "messages" est le nom du fichier properties qui est un simple fichier text portant l'extension "properties" (en l'occurence messages.properties). Si tu veux le mettre dans des package, il faut les spécifier aussi, par exemple : "package1.package2.messages"

    Voici un contenu possible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Test.0=Coucou c'est moi
    Test.color=#FF0000
    Ensuite tu récupère ce que tu veux par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class Test {
     
    	public static void main(String[] args) {
    		System.out.println(Messages.getString("Test.0"));
    		System.out.println(Messages.getColor("Test.color")); 
    	}
     
    }
    C'est surtout fait pour des chaines de caractères (internationalisation), mais rien ne t'empêche de t'en servir pour paramétrer des éléments.

  7. #7
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    145
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations forums :
    Inscription : Septembre 2008
    Messages : 145
    Par défaut créer les éléments
    Grand merci à tous ! ce sont de super infos !!

    Pour la partie récup des données à partir d'un fichier c'est ok, cependant je me pose encore des questions pour arriver à créer un bouton en provenance de paramètres extérieurs... je ne trouve pas d'exemple, en prog on crée le bouton par exemple en tapant du code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Bu1 = new Button("Ok");
    Bu1.addActionListener(this);
    controls.add(Bu1);
    if (e.getSource() == Bu1) xxx.fonct1();
    mais là vu que ça vient d'un fichier, il faut que je lis le fichier en faisant des boucles pour créer les différents boutons, mais comment faire pour le créer puis pour utiliser un bouton qui serait optionnel ?? voici un exemple:

    l'utilisateur demande dans le script en xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CreerBouton(BP1,x,y,rouge)
    JouerSon("son.wma")
    AttendreAppuiBouton(BP1)
    JouerSon("son2.wma")
    Est-il possible de coder cela en JAVA car j'avoue être un peu perdu...j'espère que vous me comprendrez

    Bonne soirée à tous
    Bien cordialement

    Greg

  8. #8
    Membre éclairé Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Par défaut
    Salut,

    je reprends ton exemple, ainsi que mon idée, c'est à dire travailler à partir d'un fichier xml :

    Bu1 = new Button("Ok");
    Bu1.addActionListener(this);
    controls.add(Bu1);
    if (e.getSource() == Bu1) xxx.fonct1();
    tu as juste à créer un fichier qui comporte en gros ces informations:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <BOUTON>
          <CARACTERISTICS name="But1" title="OK" actionListener="this" /CARACTERISTICS>
    </BOUTON>
    et pour ton code java :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public JButton createButton(String name, String title, ActionListener actionListener, ...() {
         Bu1 = new Button("Ok");
         Bu1.addActionListener(this);
    }
    dans ton JPanel :

    et dans ta méthode ActionPerformed:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public vois ActionPerformed(ActionEvent e) {
         if(e.getSource()==But1) {
              xxx.fonct1();
         }
    }
    Voilà, mais bon, j'ai pas testé ces codes, donc je sais pas si un copier-coller fonctionnera sans erreurs lool

    Bonne soirée ;-)

    EDIT : Il ne te reste plus qu'à regarder du côté des méthodes qui permettent de lire et d'écrire dans un fichier XML, fais toi par exemple une classe dédiée à cette seule classe, ou bien à choisir de travailler à aprtir d'un fichier .properties :-)

  9. #9
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Par défaut
    Une petite précisions, ce ne peut-être que du paramétrage. Tu ne pourra pas définir du code à partir d'un fichier, vu qu'il est nécessaire de compiler ce code. Donc que du paramétrage.

    Car quand tu écrit :
    AttendreAppuiBouton(BP1)
    J'ai un peu peur
    J'ai l'impression que tu part sur l'idée de faire un script d'exécution !

  10. #10
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Salut,
    L'approche déclarative pour batir les IHMs est un sujet en vogue actuellement
    Declarative UI

    Il faut te prévenir tout de suite : y'a du boulot devant toi si tu veux faire quelque chose de fonctionnel et riche avec ça.
    Rien que pour supporter tous les composants + tous leurs attributs, bonjour les dégats

    Donc, à part pour un but pédagogique ou tu te limiteras à quelques cas d'utilisation, je t'invite à bien refléchir avant de te lancer

    Il existe plusieurs solutions pour le Declarative UI, mais je vais te pointer vers l'une d'elle en particulier, tkui : ToolKit for User Interface (normal, j'ai bossé (un tout petit peu) ladessus ), un projet crée et maintenu par l'un des membres de Développez.

    http://tk-ui.sourceforge.net/fr/index.html

    Cette bibliothèque te permet justement de décrire tes IHMs d'une façon déclarative.
    Le truc, c'est que tkui est vraiment modulaire et générique, dans la mesure où tout est configurable/interchangeable, ce qui te permet :
    - D'utiliser n'importe quelle format XML pour décrire les IHMs : XUL, XHTML, XAML, XForms, etc. Pire encore tu peux mixer plusieurs langages dans un même fichier.
    - De construire les interfaces avec n'importe quelle bibliothèque GUI, comme Swing ou SWT (qui sont tous les deux supportées).
    - De contrôler précisément plusieurs comportement du moteur, comme le chargement des ressources, etc.
    - D'utiliser le CSS pour appliquer les styles
    - D'utiliser un langage de scripting quelconque pour faire de la programmation déclarative, genre qu'est ce qui se passe quand un tel bouton est cliqué, etc. Pour l'instant, JavaScript est supporté, mais rien ne t'empêche d'utiliser un autre langage, comme Groovy ou BeanShell, etc.

    Plus encore le binding (lier un composant texte à une variable JavaScript par exemple, ou lier un label à une zone de texte, ou encore lier un Tree à un fichier XML, etc.)
    Toujours dans l'esprit de la modularité, le binding est lui aussi configurable, dans la mesure ou tu peux indiquer au moteur d'utiliser ta propre syntaxe pour le binding.

    Note: le projet est encore en cours de développement et pas encore finalisé, mais le noyau (UI déclaratif, CSS, binding est fonctionnel).

  11. #11
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    145
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations forums :
    Inscription : Septembre 2008
    Messages : 145
    Par défaut Cool
    Merci à vous trois.

    Pour le XML c'est ok Balbuzard, t'es un chef.
    C'est exactement ce que je veux avoir Djo.mos, je ne savais pas que c'était un projet ! c'est super cool

    Pour répondre à ton message Djo.mos, tu dis que c'est du boulot, mais tu penses au côté XML ou au côté JAVA ? Je vais lire la doc de tk-ui...

    Bonne soirée

    Greg

  12. #12
    Membre Expert
    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 : 48
    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
    Par défaut
    Bonsoir greg,

    Tout d'abrod merci a djo d'avoir parle de TK-UI.
    Concernant la doc de TK-UI, elle n'est malheureusement pas a jour et ca va etre difficile pour toi de voir comment l'API fonctionne. De plus comme a dit djo, TK-UI est en cours de developpement (depuis 1 an a peu pres).

    Le but de TK-UI est ensuite de l'utiliser dans Akrogen un plugin Eclipse de generation de code ou l'on peut decrire ses wizards en XUL.

    Il n'existe pas de distribution aujourd'hui mais seulement des projets Eclipse car l'API (interne) n'est pas encore tres stable car il se peut que certaisn modules de TK-UI (notemment le moteur CSS et le binding avec DOM) interesse Eclipse pour la futur version d'Eclipse E4.

    Greg, ce que je te propose c'est de me decrire l'interface la plus complexe que tu souhaites gerer pour voir si TK-UI pourrait t'etre util. Tu peux ma la decrire en HTML ou XUL (ca sera plus simple) et me dire ce que tu souhaites gerer(les evenements....).

    Pour te donner une idee, TK-UI a implemente grossierement XHTML et XUL et ensuite tu gere ton IHM comme en javascript dans un browser WEB :



    Je pourrais te dire ce que sait gerer TK-UI et ce qu'il ne sait pas gerer. Ensuite si jamais tu es interesse, j'essaierai de faire une distribution le plus rapîdement possible et je mettrais a jour le user guide pour t'aiguiller. Mais bon faudra compter a peu pres 2/3 semaines je pense.

    Angelo

  13. #13
    Membre Expert
    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 : 48
    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
    Par défaut
    J'ai oublie d repondre a ta question.

    Pour répondre à ton message Djo.mos, tu dis que c'est du boulot, mais tu penses au côté XML ou au côté JAVA ? Je vais lire la doc de tk-ui...
    J'ai etudié de nombreux projet qui permettent de decrire une IHM en XML et pratiquement tous les projets charge dans un DOM (ex : JDOM, Xerces) le XML puis parcourt le DOM pour construire l'IHM, autrement dit si l'element input est trouve on instancie un JTextField. Ensuite pour retrouver un JTextField construit par le XML, ils ont une API propriétaire.

    TK-UI a une autre approche qui ressemble tres fortement a celle d'un DOM d'un browser web. Autrement dit TK-UI a etendu le DOM de Xerces ou le XML est charge dans ce DOM etendu. Chaque element XML (ex : input) est bindé à une widget (ex : JTextField), autrement dit lorsque l'on modifie le DOM (ex : input.value = "bla bla"), ca modifie la JTextField.

    Tout ca pour dire que la difficulte est de gerer la synchronisation entre le DOM et l'UI (Swing, SWT....). Il faut synchroniser les elements XML avec uen widget mais aussi ses attributs (ex : attribut value avec le JTextField.setText()).

    Ca c'est pour une widget simple, mais apres si tu veux gerer les Tree, Table ca devient beaucoup plus complexe.

    Mais je croies que le complique, ce sont les layout. En effet gérer les table HTML, c'est super compliqué. Heureusement TK-UI utilise MigLayout qui permet de decrire son layout sous forme de string et qui marche a la fois avec Swing et SWT.

    Angelo

  14. #14
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    145
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations forums :
    Inscription : Septembre 2008
    Messages : 145
    Par défaut exemple
    Merci Azerr,

    J'ai commencé à lire... bouhhh, pas simple Tk-ui pour moi !

    En fait, mes interfaces sont plutôt simples, il s'agit d'une base qui est fixe avec des modifications dans le menu (ajout d'un ou deux champs), ajouter deux ou trois boutons, ajouter un ou deux champs de saisi, ceci dans un premier temps.

    Encore ajouter ces éléments me paraît possible (je suis optimiste...lol) mais je voudrais avoir en plus un lancement de certaines tâches qui seraient lancées par certains boutons. On crée un bouton et lors de l'appui, on lance les 5 commandes du fichier XML qui sont interprétées...hummm, ça a l'air simple à écrire en français...

    Merci pour votre aide

    Je te donne un exemple au plus vite, mais en xml il faut que je m'y mette...

    A+
    Greg

    PS: ce serait cool de trouver votre lien dans google en tapant par exemple: "java ihm paramétrable"

  15. #15
    Membre Expert
    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 : 48
    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
    Par défaut
    Salut greg

    J'ai commencé à lire... bouhhh, pas simple Tk-ui pour moi !
    Je m'en doutais un peu.


    Je te donne un exemple au plus vite, mais en xml il faut que je m'y mette...
    Tu n'a jamais ecrit de HTML,de Javascript? Tu verras c ps super complique et ca me permettra de voir si TK-UI pourra faire l'affaire. J'attends ton interface decrites en XML.


    Angelo

Discussions similaires

  1. Réponses: 9
    Dernier message: 06/05/2009, 13h23
  2. ajout de données à partir d'un fichier texte
    Par drakenzara dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 14/04/2006, 12h39
  3. Lancer des commandes dos à partir d'un fichier texte
    Par tpdm dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 09/08/2005, 16h56
  4. état à partir d'un fichier texte
    Par onkel dans le forum Bases de données
    Réponses: 1
    Dernier message: 21/07/2005, 10h26
  5. Réponses: 11
    Dernier message: 04/08/2003, 15h30

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