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 :

[Swing] Export javax.swing.UIManager; jar exécutable


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Novembre 2012
    Messages : 26
    Points : 14
    Points
    14
    Par défaut [Swing] Export javax.swing.UIManager; jar exécutable
    Bonjour,

    Je développe une application en Java Swing et j'ai découvert les style llok and feel un peu par hasard.
    En effet après être passé sur la doc oracle, en mettant la ligne : UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); avant la création de la GUI, le style changeait.

    Seulement après avoir envoyé le projet a un collègue qui trvail exactement sur le même système d'exploitation que moi, le style ne changeait pas avec cette ligne et restait par défaut.

    En effectuant quelques recherches, j'ai pu intégrer des style de synthetica, en ajoutant le .jar au librairies du projet.

    Du coup je me posais la question, comment faire pour que le style que je possède par défaut quand je tape UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); soit intégré au projet, l'import en haut du projet est : import javax.swing.UIManager;

    De plus quand je génère un jar exécutable, l'apli fonctionne chez moi avec le nouveau style, mais avec l'ancien chez mon collègue, et aussi avec l'ancien quand je le lance sous windows.

    Voici un screen de avec le style et sans ensuite.

    Nom : Look.png
Affichages : 319
Taille : 5,4 Ko

    Nom : SansLook.png
Affichages : 272
Taille : 5,9 Ko

    Et voici le code

    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
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;
     
    public class Application {
     
    	public static void main(String[] args)
        {
     
     
    		try {
    			// Set System L&F
    			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    		} 
    		catch (UnsupportedLookAndFeelException e) {
    			// handle exception
    		}
    		catch (ClassNotFoundException e) {
    			// handle exception
    		}
    		catch (InstantiationException e) {
    			// handle exception
    		}
    		catch (IllegalAccessException e) {
    			// handle exception
    		}
    		IHM ihm = new IHM();
     
        }	
    }
    Merci d'avance pour votre aide

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    La méthode getSystemLookAndFeelClassName() permet d'obtenir un look and feel par défaut, en suivant ces règles :

    1. Si la propriété système swing.defaultlaf a une valeur, on utilise cette valeur
    2. Sinon s'il existe un fichier swing.properties contient une propriété appelé swing.defaultlaf, on utilise cette propriété
    3. Sinon on utilise un look and feel spécifique à l'OS sous lequel l'application se lance


    Normalement, pour affecter le style synthetica, on doit faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UIManager.setLookAndFeel("de.javasoft.plaf.synthetica.SyntheticaStandardLookAndFeel");
    Il faut que le jar de synthetica soit intégré à la version diffusée pour que ce look and feel soit utilisé (soit l'intégrer au jar de l'application lorsqu'on le créé, soit le mettre dans le même dossier du jar de l'application, et l'ajouter au classpath).

    On peut indiquer que ce look and feel est le lnf système, en ajoutant à la ligne de commande de lancement de l'application -Dsystem.defautlaf=de.javasoft.plaf.synthetica.SyntheticaStandardLookAndFeel, auquel cas, getSystemLookAndFeelClassName().

    Si tu n'as rien fait de particulier (comme modifier la propriété system.defaultlaf), getSystemLookAndFeelClassName() devrait sélectionner le même lnf sur ton système et celui de ton collègue s'il utilise le même système (même version, même configuration).

    Ce que je ne comprends pas vraiment, c'est quand tu dis que sous Windows tu n'a pas le même lnf que chez toi. Chez toi, c'est pas sous Windows ? Ou ce n'est pas la même version de Windows ? Si c'est bien la même version, c'est qu'à priori le fait d'intégrer le jar fait que le lnf system n'est plus le lnf standard, peut être à cause d'un appel particulier qui positionnerait la propriété sytem.defaultlaf.

    Est-ce que tu utiliserais OpenJDK ? Je ne sais pas comment OpenJDK détermine l'emplacement du fichier swing.properties, mais peut être est-ce là l'explication.

    Quoiqu'il en soit, pour utiliser synthetica, référence le directement (comme j'ai fait ci-dessus) au lieu d'utilise getSystemLookAndFeelClassName() et tu auras de manière sûr celui que tu veux (et il suffit d'exporter ton jar applicatif avec le jar de synthetica intégré).
    Tu peux également afficher le résultat de getSystemLookAndFeelClassName() pour régarder quel est le nom de la classe vraiment utilisé quand tu exécutes ton application et que tu vois bien le lnf que tu désires, puis modifier ton programme pour affecter ce lnf en mettant son nom en dur, ce qui fait qu'il ne dépendera plus de la propriété système.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Novembre 2012
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    Oui, le synthética, j'ai reussi a le faire fonctionner sur mon Opensuse qui a un OpenJDK et sur Windows 7.

    J'ai un peu avancé,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UIManager.LookAndFeelInfo plaf[] = UIManager.getInstalledLookAndFeels();
        for (int i = 0, n = plaf.length; i < n; i++) {
          System.out.println("Name: " + plaf[i].getName());
          System.out.println("  Class name: " + plaf[i].getClassName());
        }
    m' a permis de voir que le lookandfeel qui est utilisé est le : com.sun.java.swing.plaf.gtk.GTKLookAndFeel

    Mais également qu'il n'est pas possible de l'utiliser sous Windows

    Comment faire pour intégrer cette classe quand je génère un jar exécutable a la manière du .jar de synthetica ?


    Si je donne a mon collègue un .jar avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    try {
    		      UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
    		    } catch (Exception e) {
    		      e.printStackTrace();
    		    }
    Cela devrait de sur charger le GTKLookAndFeel ?

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    A ma connaissance le lnf GTK+ n'est disponible que pour les plateformes linux avec au moins GTK+ 2.2.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Novembre 2012
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    Effectivement, si j'avais mieux lu la doc Oracle :

    For Linux and Solaris, the System L&Fs are "GTK+" if GTK+ 2.2 or later is installed, "Motif" otherwise. For Windows, the System L&F is "Windows," which mimics the L&F of the particular Windows OS that is running—classic Windows, XP, or Vista. The GTK+, Motif, and Windows L&Fs are provided by Sun and shipped with the Java SDK and JRE, although they are not part of the Java API.


    Merci en tout cas

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Il peut exister des "pseudo émulateurs" parfois. Par exemple, on peut trouver des look and feel qui donnent l'apparence de look maxosx a des applications java sous Windows.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Novembre 2012
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    Oui j'ai trouvé une belle liste ici : http://javootoo.com/plaf/notskinnable.html

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

Discussions similaires

  1. [JAR] Export jar exécutable
    Par meli0207 dans le forum Eclipse Java
    Réponses: 8
    Dernier message: 15/06/2010, 15h19
  2. Exporter en un fichier jar exécutable avec des ressources
    Par Marvelll dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 04/06/2010, 14h38
  3. javax.swing.GroupLayout n'existe pas
    Par sissi25 dans le forum AWT/Swing
    Réponses: 18
    Dernier message: 12/07/2007, 10h28
  4. [javax.swing.Timer] Arrêter mon Timer
    Par GLDavid dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 17/01/2006, 15h26
  5. Utilisation javax.swing.ButtonGroup dans Visual Editor
    Par inch dans le forum Composants
    Réponses: 3
    Dernier message: 16/12/2005, 16h25

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