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

Composants Java Discussion :

JComboBox equivalent optgroup label


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Par défaut JComboBox equivalent optgroup label
    Bonsoir à tous,


    Je cherche a savoir si c'est possible de mettre des éléments dans une JComboBox en élément de groupe (non sélectionnable).
    Je sais que l'équivalent de ce que je recherche en HTML est l'opgroup!
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <select>
      <optgroup label="Swedish Cars">
        <option value="volvo">Volvo</option>
        <option value="saab">Saab</option>
      </optgroup>
      <optgroup label="German Cars">
        <option value="mercedes">Mercedes</option>
        <option value="audi">Audi</option>
      </optgroup>
    </select>
    Swedish Cars et German Cars apparaissent dans la liste déroulante sans le pouvoir de les sélectionner.

    Merci

  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
    La JComboBox ne permet pas de le faire à l'état normal. On peut tricher en utilisant un ComboBoxModel customisé dont certains éléments sont des délimiteurs, avec un Renderer spécifique pour les délimiteurs.

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    public class ExtendedComboBox extends JComboBox {
     
        public ExtendedComboBox() {
            setModel(new ExtendedComboBoxModel());
            setRenderer(new ExtendedListCellRenderer());
        }
     
        public void addDelimiter(String text) {
            this.addItem(new Delimiter(text));
        }
     
        private static class ExtendedComboBoxModel extends DefaultComboBoxModel {
            @Override
            public void setSelectedItem(Object anObject) {
                if (!(anObject instanceof Delimiter)) {
                    super.setSelectedItem(anObject);
                } else {
                    int index = getIndexOf(anObject);
                    if (index < getSize()) {
                        setSelectedItem(getElementAt(index+1));
                    }
                }
            }
     
        }
     
        private static class ExtendedListCellRenderer 
                        extends DefaultListCellRenderer {
     
            @Override
            public Component getListCellRendererComponent(JList list, Object value,
                            int index, boolean isSelected, boolean cellHasFocus) {
                if (!(value instanceof Delimiter)) {
                    return super.getListCellRendererComponent(list, value, index,
                            isSelected, cellHasFocus);
                } else {
                    JLabel label = new JLabel(value.toString());
                    Font f = label.getFont();
                    label.setFont(f.deriveFont(f.getStyle() 
                               | Font.BOLD | Font.ITALIC));
                    return label;
                }
            }
        }
     
        private static class Delimiter {
            private String text;
     
            private Delimiter(String text) {
                this.text = text;
            }
     
            @Override
            public String toString() {
                return text.toString();
            }
        }
    }

  3. #3
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Par défaut
    Merci Sinok, super boulot!

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

Discussions similaires

  1. Duplication des labels checkboxlist et optgroup
    Par Snyper dans le forum Struts 2
    Réponses: 1
    Dernier message: 19/01/2012, 09h48
  2. [1.x] comment supprimer le label d'un optgroup(liste deroulante)
    Par lepopol dans le forum Symfony
    Réponses: 5
    Dernier message: 16/11/2010, 09h49
  3. Equivalent d'un "optgroup label" en C#
    Par Aurelien.B dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/12/2009, 14h17
  4. ajout d un panel(label+2 textfield) dans un jcombobox
    Par mickaelo dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 03/09/2007, 15h18
  5. [Kylix] Equivalent ShellExec en CLX
    Par Anonymous dans le forum EDI
    Réponses: 7
    Dernier message: 14/08/2002, 11h55

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