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 :

JCheckbox icones persos - Bug sous linux mais pas sous Windows


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Hemophilius
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 105
    Par défaut JCheckbox icones persos - Bug sous linux mais pas sous Windows
    Bonjour à tous !
    J'ai fait une recherche sur google puis sur ce forum, mais je n'arrive pas à trouver réponse à ma question. Voyez-vous, j'ai une JCheckbox dont je personnalise les icones afin qu'elle affiche une étoile pleine ou vide selon qu'elle est sélectionnée ou non. Sous Windows, ça marche sans souci ! Mais sous Linux, mon image ne s'affiche juste pas... J'utilise JDK 7 sur les deux OS.

    Donc voilà, si je labellise bien ma JCheckbox, je vois le texte mais aucune icone, pas même celle par défaut (si j'ai fait les setIcon, setSelectIcon etc).
    C'est vraiment bizarre. Pourquoi cela fonctionnerait-il sous WIndows 7 et pas Linux ? Mystère...

    Mes icones sont des png, et le chargement se passe sans soucis car il est fait dans une classe séparée (ProgramIcons), et si je veux afficher l'icone dans un bouton (new JButton("un bouton", ProgramIcons.favEnabled)), elle s'affiche bien. J'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class ProgramIcons {
      //...
     
      public static final ImageIcon favEnabledIcon     = new ImageIcon("img/favEnabled.png");
      public static final ImageIcon favPressedIcon     = new ImageIcon("img/favPressed.png");
      public static final ImageIcon favDisabledIcon    = new ImageIcon("img/favDisabled.png");
      public static final ImageIcon favDisabledSelIcon = new ImageIcon("img/favDisabledSel.png");
     
      private ProgramIcons() {}
    }
    Pour le chargement de mes images. Ensuite, je crée ma checkbox comme ceci dans mon programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        JCheckbox favToggleComponent = new JCheckBox("");
        favToggleComponent.setIcon(ProgramIcons.favDisabledIcon);
        favToggleComponent.setSelectedIcon(ProgramIcons.favEnabledIcon);
        favToggleComponent.setPressedIcon(ProgramIcons.favPressedIcon);
        favToggleComponent.setDisabledIcon(ProgramIcons.favDisabledIcon);
        favToggleComponent.setDisabledSelectedIcon(ProgramIcons.favDisabledSelIcon);
    Et comme je vous l'ai dit : sous Windows, nickel, sous linux, il n'y a rien d'affiché.

    J'espère que vous pourrez m'aider...

    Bien à vous,
    Hemophilius

    EDIT : J'ai oublié de vous dire, mais je charge d'autres images de la même façon (dans le "//...") et je les affiche dans des boutons sans aucun problème sous Linux comme sous Windows, mais dans des boutons... Quelle que soit l'image que je sélectionne pour l'icone de ma checkbox, rien n'apparait.

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Il est préférable de mettre ces icônes dans le jar de ton appli et d'y accéder via le classpath.

    Imaginons que tu aies un package img dans ton projet contenant tes icônes:

    Ta première ligne de chargement deviendrait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static final ImageIcon favEnabledIcon = new ImageIcon(ProgramIcons.class.getRessource("/img/favEnabled.png"));

  3. #3
    Membre confirmé Avatar de Hemophilius
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 105
    Par défaut
    En fait c'est un projet à faire pour l'unif, et dans les consignes il est bien spécifié qu'on ne peut pas faire de JAR...

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Ce n'est pas grave, ça marche tant qu'il y a un package dans ton projet

    Le jar n'est qu'une archive de livraison/déploiement.
    Ton classpath existe quoi qu'il en soit, et si tu as des ressources (images) utilisées par ton programme, il est amplement recommandé de les mettre dans le classpath de ton projet (aka dans un des package de ton projet).

    Cela permet de s'abstraire des contraintes de chemin relatives aux OS.

  5. #5
    Membre confirmé Avatar de Hemophilius
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 105
    Par défaut
    C'est le cas mais quand j'utilisais cette méthode, ça ne marchait pas... Trop long à expliquer ici mais ce n'est pas le problème car je peux mettre ces images chargées ainsi dans mes boutons. C'est juste sur la checkbox que ça ne marche pas, et que sous linux. Tu vois ? :s

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    La solution que je t'ai proposé marche sur tout les système.

    Tu passes bien par un appel à la méthode getResource à laquelle tu passes le chemin absolu dans le classpath?

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

Discussions similaires

  1. [LibreOffice][Tableur] Une macro qui fonctionne sous Linux mais pas sous windows
    Par ludox62 dans le forum OpenOffice & LibreOffice
    Réponses: 3
    Dernier message: 07/01/2014, 21h26
  2. Bad_alloc sous Linux mais pas sous mac
    Par betaplus dans le forum C++
    Réponses: 4
    Dernier message: 11/03/2013, 14h03
  3. Script qui marche sous Linux mais pas sous Windows et vice versa
    Par tu-phat dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 26/11/2009, 02h39
  4. Réponses: 5
    Dernier message: 13/04/2009, 23h12
  5. [JMF] Code fonctionnant sous Linux mais pas sous XP
    Par Monsieur_Max dans le forum Multimédia
    Réponses: 4
    Dernier message: 25/05/2006, 18h57

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