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

AWT/Swing Java Discussion :

Conception d'une charte graphique avec Swing (pour les experts en look and feel)


Sujet :

AWT/Swing Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 8
    Points : 9
    Points
    9
    Par défaut Conception d'une charte graphique avec Swing (pour les experts en look and feel)
    Bonjour,

    Je suis chargé de la création d'une charte graphique pour une application swing (jdk 1.5)
    Je souhaiterais avoir vos avis sur la meilleure "architecture" à adopter sachant que je voudrais passer le moins de temps possible dessus (logique) et que la création de nouveaux écrans soit la plus simple possible pour les développeurs.

    1. La création d'un look and feel me parait beaucoup trop longue et complexe.
    2. Je souhaiterais partir du WindowsLookAndFeel (ou peut-être un autre, à définir) et modifier quelques aspects de base, à savoir :

    - rendre tous les panels non opaques par défaut (pour qu'on puisse voir un dégradé ou une image dans le fond de l'application).
    - modifier certaines fonts pour que toute l'application soit homogène (notamment pour les JTextArea qui n'ont pas la même font par défaut que les JLabels ou JTextfield par exemple)
    - modifier certaines couleurs de texte
    - harmoniser les bordures des panels, des scrollpanes
    - éventuellement définir une taille fixe pour les boutons.
    - ajouter peut-être quelques effets (dégradés derrière les titres des panels par exemple)
    ...etc

    le tout étant centralisé dans un fichier xml, properties ou éventuellement une ou plusieurs classes (le top serait plusieurs fichiers qui constitueraient des skins différentes pour l'appli, on peut toujours rêver)

    L'idéal serait que le développeur n'ait jamais à se soucier de ces aspects, en gros qu'il n'ait jamais à appeler des méthodes setFont(), setBackgroundColor(), setBorder() ou je ne sais quel autre méthode sur les composants qu'il ajoute, sachant que le placement des composants sera réalisé avec le concepteur de NetBeans (Matisse) en utilisant des Layouts de type GroupLayout et GridBagLayout.

    L'idée la + simple et la + rapide qui me vient à l'esprit est la suivante :

    1. Appliquer le look and Feel windows (ou un autre).
    2. passer par des appels du type :
    UIManager.put("Label.font", new Font("Arial", Font.BOLD,12));

    1. Que pensez-vous de cette solution ? Est-ce que cela risque de poser des problèmes par la suite (changement du look and feel de base par exemple) ?
    2. Est-ce que mon application sera toujours portable ? (sous linux notamment, je pose cette question suite à la lecture de ce thread)
    3. Vaut-il mieux étendre les classes de swing en appliquant les propriétés concernées et utiliser ces composants dans le concepteur ? (sachant que j'ai un peu de mal à utiliser l'héritage avec Matisse et le refactoring ne fonctionne pas sur le code généré par le concepteur).
    4. Avez-vous une meilleure solution (plus "propre" peut-être) ?
    5. J'ai jeté un rapide coup d'oeil à Synth mais apparemment il faut partir de zéro et définir tous les composants (sacré boulot !), je ne crois pas qu'on puisse partir du look and feel windows. Sinon, il y a Synthetica, mais ça ne me plait pas trop (je sais que je suis difficile !)

    Voilà, merci d'avance pour vos réponses,

    Laurent.

    PS : Je connais déjà la plupart des look and feel existants (jgoodies, skin look and feel et autres sur javootoo.com) mais je n'ai pas trop envie de partir là-dessus.

  2. #2
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Première réponse ce ne sera pas paortable puisque le look & feel windows n'est utilisable que sous ...... windows (come chanque look & feel natif qui n'est utilisable que sur l'OS ciblé).

    Dans ton cas je me baserait plutôt sur un look & feel cross platform comment peuvent l'être les Platic de JGoodies (qui proposent d'ailleurs un système de thèmes) ou un l&f héritant de Metal

    Puis grosso modo une classe permettant le chargement de properties.

    En ce qui concerne la taille fixe des boutons celà me semble un peu bancal , car suivant les résolutions d'écrans, les polices tu auras des résultats pas top esthétiquement parlant. Dans ce cas l'utilisation du FormLayout JGoodies pourrait s'avèrer payant puisqu'il introduit la notion de Dialog Units qui sont des tailles qui varient en fonction de la résolution. Et ce layout est très rapide à prendre en main, offre des classes de type builder permettant de créer relativement rapidement tout type d'interface.

    Ensuite, je me verrais mal mettre la même Font (je parle de taille et style) partout, le texte d'un JLabel doit être plus "visible" que le texte d'une JTextarea. Enfin tout est histoire d'équilibre et de ne pas trop s'éloigner non plus de l'OS visuellement parlant...

    Et en ce qui concerne le "plus propre" ce serait définitivement de créer un L&F mais ça prend paquet de temps et surtout de bon talents de graphiste/designer avant tout....

    (Substance étant dans ce cas le contre exemple: créé par un développeur et visuellement pas top top)


    Enfin ce n'est que des idées jetées comme ça, à toi de voir ensuite...
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  3. #3
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Argh Safari vient de bouffer toute ma réponse...

    En résumé, j'approuvais la plupart des tes idées, notamment la taille fixe des boutons (si tu prends en compte la résolution de l'écran et la taille des polices). En revanche je te conseille de partir de Synthetica. Les thèmes standards sont moyens, mais les thèmes supplémentaires sont jolis et cross-platform. Jette un oeil à Black Moon, Black Star et Green Dream (http://www.javasoft.de/jsf/public/pr...hetica/themes).

    P.S : Évite de modifier la couleur des textes.

    P.P.S : "(Substance étant dans ce cas le contre exemple: créé par un développeur et visuellement pas top top)" Enfin un peu de bon sens sur ce forum ^^
    Romain Guy
    Android - Mon livre - Mon blog

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Merci pour vos réponses.

    Je suis un peu vert aussi que Safari ait bouffé toute ta réponse, j'aurais bien aimé connaître ton avis en détail (c'est pas tous les jours qu'on peut avoir des conseils de quelqu'un de chez Sun ! Au passage, j'ai regardé les vidéos d'Aerith et ça donne vraiment envie de l'utiliser, c'est beau !)

    C'est vrai que Synth parait être la solution la plus séduisante, mais malheureusement sans doute pas encore assez mature (au vu de ce que j'ai lu et vu jusqu'ici). Et puis le seul LookAndFeel complet sur lequel on peut partir (dites-moi si je me trompe) est Synthetica et il est payant pour une utilisation commerciale. J'ai testé quelques thèmes (c'est vrai que le black moon est très joli) sur mon prototype et j'ai par exemple des problèmes de flickering lors du redimensionnement de ma JFrame (j'ai un peu peur de tomber sur d'autres surprises de ce type).

    Si j'ai bien suivi, Romain (heu, tu permets que je t'appelle Romain ?), ton boulot consiste à créer un LookAndFeel existant (Metal ? Windows ?) à partir de Synth, c'est ça ? Tu sais s'il y en aura un (ou plus) inclus dans Java SE 6 (j'ai rien vu sur Synth dans le "What's New in Java SE 6 Beta 2") ?

    Sinon, je suis aussi allé faire un tour sur JGoodies, j'ai regardé les démos, lu quelques infos sur le FormLayout qui a l'air effectivement bien, mais ce qui m'embête c'est soit de devoir "former" les futurs développeurs d'IHM à ce nouveau layout (après m'être formé moi-même), soit d'utiliser un concepteur comme abeille qui est exclusivement destiné à ce layout, alors que Matisse est quand même super pratique avec sa gestion du GridBagLayout et du GroupLayout.

    Enfin bon, tout ça pour dire que pour l'instant et en attendant l'arrivée d'une base saine et non payante pour Synth, je vais sans doute rester sur mon idée de départ, à savoir appliquer un look and feel de base (disons le look and feel natif) et passer par des UIManager.put(...), même si ça ne me parait pas super propre...

    Voilà, toutes les autres idées sont bien sur les bienvenues.

  5. #5
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Je suis un peu vert aussi que Safari ait bouffé toute ta réponse, j'aurais bien aimé connaître ton avis en détail
    Note : faire plus attention aux boutons Back et Forward du navigateurs mappés sur des boutons de la souris ;-)

    (c'est pas tous les jours qu'on peut avoir des conseils de quelqu'un de chez Sun ! Au passage, j'ai regardé les vidéos d'Aerith et ça donne vraiment envie de l'utiliser, c'est beau !)
    Je ne travaille plus chez Sun pour le moment.

    Et puis le seul LookAndFeel complet sur lequel on peut partir (dites-moi si je me trompe) est Synthetica et il est payant pour une utilisation commerciale. J'ai testé quelques thèmes (c'est vrai que le black moon est très joli) sur mon prototype et j'ai par exemple des problèmes de flickering lors du redimensionnement de ma JFrame (j'ai un peu peur de tomber sur d'autres surprises de ce type).
    Il est vrai qu'il est payant mais il coûtera toujours moins cher que le nombre d'heures passées à créer un nouveau look and feel soi-même.

    Si j'ai bien suivi, Romain (heu, tu permets que je t'appelle Romain ?), ton boulot consiste à créer un LookAndFeel existant (Metal ? Windows ?) à partir de Synth, c'est ça ? Tu sais s'il y en aura un (ou plus) inclus dans Java SE 6 (j'ai rien vu sur Synth dans le "What's New in Java SE 6 Beta 2") ?
    Malheureusement j'ai eu d'autres priorités et ce look and feel n'a pas vu le jour. Comme je ne suis plus chez Sun (au moins pour le moment je ne crois pas que quelqu'un y consacre du temps. Peut-être que si. Je ne sais pas

    Sinon, je suis aussi allé faire un tour sur JGoodies, j'ai regardé les démos, lu quelques infos sur le FormLayout qui a l'air effectivement bien, mais ce qui m'embête ... alors que Matisse est quand même super pratique avec sa gestion du GridBagLayout et du GroupLayout.
    Je comprends tout à fait. Si Matisse te suffit, ne va pas voir ailleurs !
    Romain Guy
    Android - Mon livre - Mon blog

  6. #6
    Membre éclairé
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Points : 704
    Points
    704
    Par défaut
    salut lasucre

    si tu veut mon avis la solution la plus pratique, la plus maintenant et la plus simple serait quand meme de crer un theme pour le look and feel Metal.

    comment ca marche? c'est pas compliquer mais tu dois juste bien comprendre la difference entre le look et le feel. (look = couleur, feel=comportement)
    Dans le look and feel metal (The Java LaF), le feel est fixer et tu peux changer le look en sub-classant MetalTheme (ou DefaultMetalTheme).

    en gros et de facon brute tu a un truc comme ca:

    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
     
    public class MyMetalTheme extends DefaultMetalTheme {
       /* tu implemente toute les methode que tu veut */
     
        public String getName() { return "mon theme"; }
     
        protected ColorUIResource getPrimary1() { return new ColorUIResource(myColor); }
        getPrimary2()
        getPrimary3()
     
        protected ColorUIResource getSecondary1() {}
        getSecondary3 et getSecondary3
     
        /* tu a aussi des methode pour les font */
        public FontUIResource getControlTextFont() {returu new FontUIResource("name", style, size);}
        public FontUIResource getUserTextFont() {...}
        public FontUIResource getMenuTextFont() {...}
     
     
        void addCustomEntriesToUITable(UIDefaults defaults) {
           si des choses t'aime pas tu peut changer dans ton UIDefault. 
     
           defaults.put("OptionPane.warningIcon", warningIcon);
     
           ou bien
     
           defaults.put("Tree.leafIcon", anIcon);
     
           ou bien
     
           defaults.put("Button.gradient", aGradient);
        }
    }

    si tu as deja une chartre graphique, tu verra que c'est facile a faire. (c'est un moyen d'arriver rapidement a s'approcher de ce que tu veux).

    et si tu as encore des chose que t'aime pas(dans le feel par exemple), tu peut sub-classer MetalXXXXUI ou BasicXXXXXUI ou XXXUI ou ComponentUI pour faire ce que tu veut et faire un put dans ton UIDefauts dans la addCustomEntriesToUITable (ou quelque chose comme ca). :-))

    je croit que c'est le plus facile et le plus rapide.

    et pour utiliser ton theme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    main() {
      UIManager.setLookAndFeel(new MetalLookAndFeel());
      MetalLookAndFeel.setCurrentTheme(new MyMetalTheme());
      new MyApplication().start();
    plus simple je connais pas.
    si c'est pas clair ou c'est pas bien expliquer ou je sais pas quoi demande :-))

    ps: note que le bout de code en haut est pas tester et j'ai pas mis de UIDefaults.LazyValue() pour l'exemple avec l'icone... c'est juste une idee que je voulais montrer.)

    pps: substance... je me souvient qu'on a deja parler de ca ici. (j'aime bien le theme Creme dans substance par exempe; et techniquement, Substance est exceptionnel)

    ppsé: je suis pas informaticien; pas developeur alors ma reponse est peut etre n'importe quoi ;-)

  7. #7
    Membre éclairé
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Points : 704
    Points
    704
    Par défaut
    j'ai ecrit:

    si tu veut mon avis la solution la plus pratique, la plus maintenant et la plus simple serait quand meme de crer un theme pour le look and feel Metal


    je voulais dire maintenable

  8. #8
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Le problème des thèmes Metal est qu'ils sont très limités dans les modifications. Les thèmes dérivant d'Ocean permettent au moins de changer les dégradés (couleurs, longueurs, etc.).

    Dans un cas comme dans l'autre, ça n'emmène pas bien loin.
    Romain Guy
    Android - Mon livre - Mon blog

  9. #9
    Membre éclairé
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Points : 704
    Points
    704
    Par défaut
    mais d'apres ce que j'ai compris avec ce qu'il a dit, il a pas des envie non plus tres grandes...
    un panel Opaque avec un degrade ? un JPanel est un JComponent opaque enfin je crois :-)))
    changer les bords de certain composant
    modifier la couleur des textes, hightlight
    ...
    c'est basique je trouve. tu dois pas jouer dans le feel et avec un theme metal tu peut t'en sortir facile :-)

    mais alors si tu veut pas synth et tu a pas le temps de crer tout un laf il te reste pas bcp de solution. la mienne ou bien faire des truc comme ca:

    JBUtton = new JButton("A button");
    button.setBackground(Color.WHITE);
    ...



    sur ce, bonne soiree a vous
    ciao

  10. #10
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Certes mais Metal limite quand même beaucoup alors qu'Ocean donne déjà un plus grand degré de liberté.
    Romain Guy
    Android - Mon livre - Mon blog

  11. #11
    Membre éclairé
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Points : 704
    Points
    704
    Par défaut
    ca depend de comment tu prend le probleme alors.

    pour moi OceanTheme n'est qu'un MetalTheme (qui extend de DefaultMetalTheme).

    maintenant c'est sur que un gros boulot est fait pour gerer deja pas mal de chose interessante dans Ocean. (que tu peut aussi refaire autrement toi meme si ca te plait pas)

  12. #12
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    OceanTheme n'est pas seulement un MetalTheme car les UI delegates de Metal contiennent des code paths spécifiques à Ocean.
    Romain Guy
    Android - Mon livre - Mon blog

  13. #13
    Membre éclairé
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Points : 704
    Points
    704
    Par défaut
    je comprend pas ce que tu veut dire. tu parle des tests MetalLookAndFeel.isUsingOcean() dans les MetalXXXXUI?

    que tu commence a partir de MetalTheme DefaultMetalTheme OceanTheme (ou MetalHighContrastTheme) ca change pas beaucoup. tu aura juste un peu de travaille en plus ou en moins.

    si on revient a ce qu'il a dit lasucre. Par exemple une image ou un gradient dans le fond de ses JPanel. (c'est bizzare mais pourquoi pas?) Tu peux pas faire ca avec les UI de Metal meme si MetalLookAndFeel.isUsingOcean() est vrai (oublions synth). tu dois alors de toute façon faire ton propre PanelUI.

    c'est "propre" et gratuit. tu as pas bcp de code a faire.
    et mieu que son idee de depart qui est
    je vais sans doute rester sur mon idée de départ, à savoir appliquer un look and feel de base (disons le look and feel natif) et passer par des UIManager.put(...)

    en plus je me demande si il va encore lire son message :-D

  14. #14
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Oui je parle de ces tests là. Avec Metal tu as forcément des aplats de couleur de partout. Avec un thème Ocean tu peux choisir entre faire des aplats de couleur ou bien des dégradés. Je trouve cela plus souple et surtout plus approprié aux interfaces modernes. D'autant plus que le thème Ocean est maintenant celui par défaut.
    Romain Guy
    Android - Mon livre - Mon blog

  15. #15
    Membre éclairé
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Points : 704
    Points
    704
    Par défaut
    [...]Avec un thème Ocean tu peux choisir entre faire des aplats de couleur ou bien des dégradés[...]
    oui oui je sais mais dommage que ca marche pas sur tout les composant (comme le JPanel par exemple) .

    je pense que le probleme de lascure c'est qu'il ne voit peut etre pas bien la difference entre le look et le feel dans un laf et ce que je voulais faire comprendre avec mon idee c'est que son reve est faisable assez facilement meme sans utiliser synth (qui serait quand meme la meilleure solution)
    son reve
    le tout étant centralisé dans un fichier xml, properties ou éventuellement une ou plusieurs classes (le top serait plusieurs fichiers qui constitueraient des skins différentes pour l'appli, on peut toujours rêver)

Discussions similaires

  1. Problème avec INJECT_EVENTS pour les tests de drag and drop
    Par Atatorus dans le forum Composants graphiques
    Réponses: 3
    Dernier message: 31/05/2012, 15h39
  2. Réponses: 5
    Dernier message: 28/09/2010, 11h06
  3. Intégrer des programmes dans une interface graphique avec GUIDE
    Par maserati222e dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 24/05/2007, 11h30
  4. Jar et interface graphique avec swing
    Par ALIAS200 dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 02/05/2007, 17h25
  5. Réponses: 5
    Dernier message: 07/12/2005, 10h41

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