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 :

Question sur les Look and Feel


Sujet :

AWT/Swing Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 55
    Points : 47
    Points
    47
    Par défaut Question sur les Look and Feel
    Bonjour à Tous.
    Au lancement d'une application Swing, j'applique un Look and Feel. Seulement dans un cas précis, j'aurais besoin que certains boutons ne se voient pas appliquer ce look and feel et qu'ils restent dans celui par défaut.
    Est ce qu'il y a une solution pour qu'au chargement de thème, j'empêche qu'il s'applique à ces 2 boutons ou est ce que je dois carrément créer un nouveau look and feel?

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38

    Informations forums :
    Inscription : Avril 2005
    Messages : 277
    Points : 143
    Points
    143
    Par défaut
    Voici comment je fais (peut être pas la mEILLEURE méthode mais elle marche) :

    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
     
    // Sauvegarde du look and feel courant, au début de l'application
    // Tu peux aussi en mettre un prédéfini ici pour marier 2 LnF
    LookAndFeel w_lnf = UIManager.getLookAndFeel();
     
    // On met un lookAndFeel Perso
    try{
    UIManager.setLookAndFeel(MonLookANdFeel);
    }catch(Exception e){e.printStackTrace();}
     
    // ICI on crée les composants avec le LnF perso
     
     
    // On remet le LnF qui était par défault
    try{
    UIManager.setLookAndFeel(w_lnf);
    }catch(Exception e){e.printStackTrace();}
     
    // On crée les composants
     
    // Etc ....... Autant de fois que tu veux ... Oublie pas de remettre les bons lookAndFeels apres les créations de composants, ca peux génèrer des bugs
    Il est impératif avec cette méthode que tu sache EXACTEMENT toujours quel lookAndFeel est actif !

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 55
    Points : 47
    Points
    47
    Par défaut
    Cela ne semble pas fonctionner. Il faut dire que j'utilise Netbeans pour générer mon interface graphique et ce sont des JXTaskPane que je veux laisser avec le look and feel d'origine.
    Quelqu'un saurait dans quel évènement des JXTaskPane je dois mettre cette modif sur le look?

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38

    Informations forums :
    Inscription : Avril 2005
    Messages : 277
    Points : 143
    Points
    143
    Par défaut
    J'utilise pas netBEans mais je skin bien des JXTaskPane !!!

    Si tu fais les manips au bon endroit ca roule ... Essaye avant de creer le JTaskPaneContainer ...

    Je te previens que si tu utilise le LiquidLookANdFeel tu te frottera surement a quelques erreurs dues au fait qu'il ne supprote pas TOUS les composants swing !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 55
    Points : 47
    Points
    47
    Par défaut
    C'est bon, c'est le look and feel Substance que j'utilise (celui qui donne des effets à la Beryl/Vista).
    Sinon j'ai trouvé comment faire dans Netbeans. C'est ce que recommandait JamesP mais appliqué à mon IDE.

    je charge mon look and Feel Substance au lancement de l'appli :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    --> try{
    UIManager.setLookAndFeel(new SubstanceLookAndFeel());
    }catch(Exception e){e.printStackTrace();}
    Sauf que sur mes jXTaskPane, sur le Pre-creation code, je mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    --> try{ UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); }catch(Exception e){e.printStackTrace();}
    et sur le Post-Creation Code je mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    try{
    UIManager.setLookAndFeel(new SubstanceLookAndFeel());
    }catch(Exception e){e.printStackTrace();}
    Ca fait un peu beaucoup mais au moins mes jXTaskPane sont jolis :-)

    Merci JamesP!

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38

    Informations forums :
    Inscription : Avril 2005
    Messages : 277
    Points : 143
    Points
    143
    Par défaut
    De rien, a ton service ^^

    Ravi d'avoir pu t'aider ...

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 55
    Points : 47
    Points
    47
    Par défaut
    Cela pose finalement encore un problème, à savoir que je ne peux pas changer de Look and Feel à la volée car mes jXTaskPane (Librairie SwingX) attrapent un look and feel très moche à chaque setLookAndFeel....

  8. #8
    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
    sur les bouton que tu veux pas changer de l&f fais un setUI

    UIManager.setLookAndFeel(new WhatEverL&F());
    ...
    myButton.setUI(new MetalButtonUI());


    toute ton application sera au l&f que ta mis dans le setLookAndFeel et le bouton myButton aura le l&f normal par defaut.

    setUI permet de changer le "l&f" d'un Component.

    si tu veux changer pour tout les composant d'un certain type tu dois changer dans ton UIDefault en faisant un put
    uiDefault.put("ButtonUI", "some.package.some.ui.class");

    a ce moment tu change pour tout les bouton de l'application et pas 1 seul.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 55
    Points : 47
    Points
    47
    Par défaut
    Exact, c'est bien cela. Ca donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                    UIManager.setLookAndFeel(new SubstanceEmeraldDuskLookAndFeel());                
                    UIManager.getLookAndFeelDefaults().put(JXTaskPaneContainer.uiClassID, new SubstanceEmeraldDuskLookAndFeel());
    Faut le mettre quand l'utilisateur change de thème et juste après le changement de thème

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 55
    Points : 47
    Points
    47
    Par défaut
    Par contre, question qui n'a rien à voir.
    Le look and feel substance dispose d'une fonction qui permet, dans une application MDI, d'avoir un apercu miniature d'une fenêtre interne réduite quand on déplace la souris dessus.
    Quelqu'un saurait comment je peux faire pour que cet aperçu soit un peu plus gros? Car là franchement je ne trouve pas (il est possible que cela n'existe pas.)

  11. #11
    Membre régulier
    Inscrit en
    Juillet 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 79
    Points : 96
    Points
    96
    Par défaut
    peut etre que ca n'existe pas en effet.
    mais je te conseille de poser la question directement a la personne qui fait substance. il fait un suivi plutot rigoureux des questions qui lui sont posées et resouds certains problemes quand tu lui demandes
    ou alors il te dire si en effet cette fonctionnalité existe ou non.

    c'est la : https://substance.dev.java.net/

  12. #12
    Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Substance and SwingX
    Hi,

    I'm the developer of Substance and i'd like to address a few issues that have been mentioned here.

    1. Substance in particular, and other LAFs in general are not written to have mix-and-match of UI delegates. It is highly recommended to have *all* UI elements painted by the same look and feel.
    2. Substance has a plugin for SwingX components which include consistent UI delegates for task pane container, task pane, status bar, month view and date picker. The list of supported components will grow in the near future. All you need to do is put the latest substance-swingx.jar somewhere in your class path - no need for changing anything in your app (Substance will pick this plugin automatically). The plugin project is at https://substance-swingx.dev.java.net

    If you have any other Substance-specific questions, you're highly advised to raise them at Substance forums, mailing lists or a direct mail to kirillcool [@at] yahoo [.dot] com. This way you'll be guaranteed to get a prompt response (i've stumbled upon this discussion by chance).

    Thanks
    Kirill

  13. #13
    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
    Notez que Swing dispose en interne d'un support pour mélanger des look and feel mais je ne pense pas que cela a jamais été vraiment testé. C'est normalement possible d'après les API

    kirillcool: You're now lurking on our French web site? :-) BTW, I'm sorry I couldn't be at Desktop Matters to attend your session.
    Romain Guy
    Android - Mon livre - Mon blog

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 55
    Points : 47
    Points
    47
    Par défaut
    Perso, le look and feel substance se mixe très bien avec le look and feel par défaut. C'est juste que certains objets Swingx sont très moches avec Substance (car certainement non prévus).
    merci pour votre aide à tous.

  15. #15
    Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Indeed
    Citation Envoyé par Gfx
    kirillcool: You're now lurking on our French web site? :-) BTW, I'm sorry I couldn't be at Desktop Matters to attend your session.
    Just followed a link.. Hopefully we'll see each other at J1.

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 55
    Points : 47
    Points
    47
    Par défaut
    Kiricool m'a donné des infos. Il faut utiliser le plug-in Substance-SwingX et on a moins d'ennuis.
    Les JXTaskPane ont alors le look substance

    Ci-joint le lien : https://substance-swingx.dev.java.net

    Par contre, pour les changements de thème substance à la volée, il faut rajouter (exemple avec le theme substance GreenMagic) :

    UIManager.getLookAndFeelDefaults().put(JXTaskPaneContainer.uiClassID, new SubstanceGreenMagicLookAndFeel());

    après le setLookAndFeel.

  17. #17
    Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Not entirely correct
    Citation Envoyé par Cassios
    Par contre, pour les changements de thème substance à la volée, il faut rajouter (exemple avec le theme substance GreenMagic) :

    UIManager.getLookAndFeelDefaults().put(JXTaskPaneContainer.uiClassID, new SubstanceGreenMagicLookAndFeel());

    après le setLookAndFeel.
    This is quite misleading (especially if this shows up in Google). It doesn't make any sense, since the relevant entries in UIManager map the UI class ID to the fully qualified class name of the matching UI delegate ("org.jvnet.substance.swingx.SubstanceTaskPaneContainerUI"). You're just putting an instance of look and feel as the value for that key. As i requested in our mail conversation, i'd appreciate a small test app that shows a problem that you're having (i don't have it in the Substance test app that uses the task pane container).

    Kirill

  18. #18
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 30
    Points : 24
    Points
    24
    Par défaut JDesktopPane et JInternalFrame
    Bonjour,

    Est-il possible de changer le look and feel uniquement sur la JInternalFrame sans que cela ne change le look and feel du JDesktopPane ?

    Je m'explique :

    Je possède 3 classes,

    1) Main

    2) Accueil (JFrame avec JDesktopPane, qui possède des paramètres d'affichage, ex : couleur de background etc.)

    3) MiniFenetre (classe avec ma JInternalFrame)

    En indiquant ceci dans la classe MiniFenetre :

    try {

    UIManager.setLookAndFeel(new SyntheticaBlueLightLookAndFeel());

    } catch (UnsupportedLookAndFeelException | ParseException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    SwingUtilities.updateComponentTreeUI(this);



    Il change bien le look and feel de la JInternalFrame mais il modifie également le look dans feel du JDesktopPane de la classe Accueil. Comme le JDesktopPane doit être le ContentPane de ma JFrame (classe Accueil) la classe Accueil se voit elle meme modifée ... Je perds donc mes paramètres d'affichage au niveau du look de la JFrame ainsi que la couleur de background etc ...

    JInternalFrame -> Look and feel Synthethica

    JDesktopPane (JFrame Accueil) -> Aucune modification

    Voilà ce que je recherche mais rien n'y fait ...

    Merci pour votre aide,

    Laurent

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Swing] Les meilleurs look and feel pour Java
    Par soulhouf dans le forum AWT/Swing
    Réponses: 22
    Dernier message: 15/05/2014, 23h24
  2. look and feel XP sur VISTA
    Par spynux dans le forum Windows Vista
    Réponses: 8
    Dernier message: 28/08/2007, 20h24
  3. Réponses: 14
    Dernier message: 15/10/2006, 11h22
  4. [C#] Look and Feel Office 2003 avec les Windows Forms
    Par vandamme dans le forum Windows Forms
    Réponses: 7
    Dernier message: 20/01/2006, 00h18
  5. [look and feel] Ou les trouver ?
    Par olive.m dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 08/03/2004, 18h42

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