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 :

Mise en forme d'un jComboBox


Sujet :

AWT/Swing Java

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 125
    Par défaut Mise en forme d'un jComboBox
    Bonjour,

    Est il possible de mettre en forme les items d'une jComboBox. Par exemple, mettre un Item en gras et les autres non ou de colorer le background d'une seule ligne. L'idée étant de faire ressortir une ligne par rapport aux autres.

    Par exemple:
    Item1
    Item 2
    Item3



    Sur un second point, est il possible d'insérer des séparateurs dans la jComboBox un peu à la manière suivante :

    ---- Première série ----
    Item 1
    Item 2
    ---- Seconde série ----
    Item 3
    Item 4

    L'idée étant que les "première série" et "seconde série" ne soient pas cliquables mais qu'ils servent uniquement à mettre un peu d'ordre et de clarté dans la liste des items de la jComboBox.

    Merci de vos conseils !

  2. #2
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Par défaut
    Pour le 1er point, il te faut modifier le renderer par défaut de ta JCOmboBox en créant un renderer héritant de ListCellRenderer (cf. JavaDoc de JComboBox : tu as un lien vers How to Use Combo Boxes )

    Pour le point 2, une idée mais peut-être pas la meilleure : tu peux gérer tes séparateur comme des items de ta liste dont la sélection n'est pas prise en compte :
    - 1 : dans le renderer : ne pas modifier le rendu si c'est un séparateur,
    - 2 : dans tes évènements : ne pas prendre en compte la sélection des séparateurs.

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 125
    Par défaut
    Pour le listCellRenderer, je vais regarder du coté de la doc en effet !

    Par contre pour ne pas prendre en compte la sélection des séparateurs, je ne vois pas trop. Si je met l'action "ActionPerformed" sur le jCombobox, et qu'avec la souris je sélectionne un séparateur, je peux très bien ne pas faire d'action dessus dans mon code, mais par contre, il sera sélectionné dans la jComboBox.

    Est il possible que le clique sur le séparateur ne soit pas possible (en gros, que ca ne referme pas la liste de la jComboBox en le sélectionnant).

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Par défaut
    Sinon je pense que tu peux utiliser ton propre ItemListener et voir quel est l'élément sélectionné
    => dans le cas d'un séparateur tu consommes l'évènement et tu ne fais rien (en espérant que cela ne ferme pas la combo),
    => dans le cas d'un autre élément : tu ne fais rien (laisse passer l'évènement pour ton ActionListener).


    NON ! Après vérif, c'est pas une bonne idée !

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 84
    Par défaut
    Fais un test sur l'item sélectionné, si c'est un séparateur tu rouvres ta popup avec showPopup(). Par contre pour que ta combo conserves l'ancien item sélectionné ça va pas être de la tarte !

  6. #6
    Membre éprouvé
    Inscrit en
    Juillet 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juillet 2003
    Messages : 79
    Par défaut
    Citation Envoyé par Tijee
    Par contre pour que ta combo conserves l'ancien item sélectionné ça va pas être de la tarte !
    ben c'est pas specialement difficile
    lors de la selection d'un item dan sune combobox 2 evenements itemEvent sont generés :
    - un pour la deselction de l'ancien item
    - et l'autre pour la selection du nouvel item

    il suffit lorsque tu recois l'event de deselection, de grader en memoire qq part l'ancien element selectionné, et lorsque tu recois l'evenement de l'item selectionné, tu verifies si ce n'est aps un separateur. Si c'est le cas tu reselectionne l'ancien élément selectionné gardé en mémoire.

    ca devrait le faire

  7. #7
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 84
    Par défaut
    C'est quel évènement la déselection ?

  8. #8
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 125
    Par défaut
    Je veux bien également l'info sur l'événement d'ancien item.

    Il n'y a vraiment aucun autre moyen que réouvrir automatiquement la jCombobox ? Car j'ai peur que visuellement on voit le fait qu'elle ait été fermée puis réouverte. Si ca pouvait etre bloqué dès le clic et qu'elle ne se ferme pas ca serait l'idéal !

  9. #9
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 84
    Par défaut
    J'avoue que je n'ai jamais essayé mais je ne pense pas que ça se voit...

  10. #10
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 913
    Billets dans le blog
    54
    Par défaut
    Citation Envoyé par Tijee
    C'est quel évènement la déselection ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public void itemStateChanged(ItemEvent event)  {
      if (event.getStateChange() == ItemEvent.DESELECTED) {
        [...]
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  11. #11
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 125
    Par défaut
    Concernant le showPopup(), je ne vois pas comment le mettre en oeuvre. Voici ce que j'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    private void jComboBoxActionPerformed(java.awt.event.ActionEvent evt)
    {
        if( jComboBox.getSelectedIndex() == 1 )
        {
            jComboBox.showPopup();
        }
    }
    Le soucis c'est qu'en faisant ca, elle se referme...

    J'ai alors essayé autre chose:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    private void jComboBoxPopupMenuWillBecomeInvisible(java.swing.event.PopupMenuEvent evt)
    {
        if( jComboBox.getSelectedIndex() == 1 )
        {
            jComboBox.firePopupMenuWillBecomeInvisible();
        }
    }
    Et la, c'est le drame, erreurs en boucle du style "stackoverflow". Je pense qu'il y a bataille entre l'évenement qui veut fermer la combobox et celui qui lui demande de ne pas la fermer.

    Mais si j'applique le firePopupMenuWillBecomeInvisble() sur le ItemStateChanged, ou le mouseClicked ca ne marche pas !

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10
    Par défaut
    A priori, dans ton code, le StackOverflow (alias débordement de pile) vient d'un appel récursif infini. Je suppose intuitivement (sans être allé voir le code) que la méthode firePopupMenuWillBecomeInvisible() de ta JComboBox fait elle-même appel à jComboBoxPopupMenuWillBecomeInvisible() de tous ses écouteurs, y compris particulièrement le tiens, d'où le problème de récursivité.

  13. #13
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 125
    Par défaut
    Je crois aussi qu'il y a ce genre de conflit. C'est bien pour cela que j'ai dit qu'il y avait "bataille" entre les evt.

    Maintenant est ce qu'il y a un moyen de contourner le problème ? Dans l'idée, c'est assez simple, je ne veux tout simplement pas que la jComboBox se referme lorsqu'on clique sur certains Items.

Discussions similaires

  1. [CR] mise en forme d'un champs texte en fonction des données
    Par niPrM dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 29/06/2004, 12h57
  2. [CR 9] Mise en forme non affichée when null
    Par Yorglaa dans le forum Formules
    Réponses: 2
    Dernier message: 28/06/2004, 18h27
  3. mise en forme rapide d'applets
    Par appletj dans le forum Applets
    Réponses: 11
    Dernier message: 03/06/2004, 14h28
  4. Mise en forme HTML
    Par Regis.C dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 25/04/2004, 12h55
  5. Mise en forme fichier avant Import
    Par jeff37 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/04/2004, 16h16

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