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][JCheckBox]Mélanger les deux


Sujet :

Composants Java

  1. #1
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 251
    Points
    1 251
    Par défaut [JComboBox][JCheckBox]Mélanger les deux
    Bonjour tout le monde.

    Je voudrais savoir comment faire pour insérer des JCheckbox dans une JCombobox.

    Codes essayés sans succès :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    			JComboBox dropDownList = new JComboBox();
    			for (int j=0;j<nominalAttributeValues[attributeIndex].size();j++){
    //				attributeList.add(nominalAttributeValues[attributeIndex].get(j).toString());
    				JCheckBox checkBox = new JCheckBox(nominalAttributeValues[attributeIndex].get(j).toString());
    				dropDownList.addItem(checkBox);
    			}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    			Vector attributeList=new Vector();
    //			JComboBox dropDownList = new JComboBox();
    			for (int j=0;j<nominalAttributeValues[attributeIndex].size();j++){
    				attributeList.add(nominalAttributeValues[attributeIndex].get(j).toString());
    //				JCheckBox checkBox = new JCheckBox(nominalAttributeValues[attributeIndex].get(j).toString());
    //				dropDownList.addItem(checkBox);
    			}
    //			dropDownList.setRenderer(new DefaultListCellRenderer());
     
    			DropDownListRenderer dropDownListRenderer=new DropDownListRenderer();
    			JComboBox dropDownList = new JComboBox(attributeList);
    			dropDownList.setPreferredSize(new Dimension(200,130));
    			dropDownList.setRenderer(dropDownListRenderer);
    avec ce CellListRenderer qui extends JLabel et implements ListCellRenderer
    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
    	public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
    	{
    		setIcon(uncheckedIcon);
     
    		if(cellHasFocus)
    			isSelected=true;
     
    		if (isSelected){
    			setBackground(list.getSelectionBackground());
    			setForeground(list.getSelectionForeground());
     
    //			checkBox.setSelected(true);
    			setIcon(checkedIcon);
    		}else{
    			setBackground(list.getBackground());
    			setForeground(list.getForeground());
     
    //			checkBox.setSelected(false);
    //			setIcon(uncheckedIcon);
    		}
     
    		setText(value.toString());		
     
    		return this;
    	}
    Par avance, merci.

  2. #2
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Que souhaites-tu afficher pour chaque item de la liste ? un label / une icone / une checkbox ?
    label ou icone : DefaultListCellRenderer fait l'affaire.
    label + icone : extension de DefaultListCellRenderer avec redéfinition de getListCellRendererComponent() pour afficher l'icone "associée" au paramètre value.
    label + icone + checkbox :
    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
    public class CheckBoxRenderer extends JCheckBox implements ListCellRenderer {
        public Component getListCellRendererComponent(
            JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
            if (isSelected) {
                setBackground(list.getSelectionBackground());
                setForeground(list.getSelectionForeground());
                setSelected(true);
                setIcon(checkedIcon);
            } else {
                setBackground(list.getBackground());
                setForeground(list.getForeground());
                setSelected(false);
                setIcon(uncheckedIcon);
            }
     
            setText((value == null) ? "" : value.toString());
            setEnabled(list.isEnabled());
            setFont(list.getFont());
     
            return this;
        }
    }

  3. #3
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 251
    Points
    1 251
    Par défaut Parfait
    C'est exactement ce qu'il me fallait.

    Merci beaucoup

    PS: Dans mon cas, la tentative d'affichage de l'icône entraine un non-affichage de la checkbox ET de l'icône. Mais c'est pas bien grâve puisque l'icône était sensée représenter la checkbox...

  4. #4
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 251
    Points
    1 251
    Par défaut
    Par contre, je n'arrive pas à afficher plusieurs checkbox sélectionnées en même temps...
    Savez-vous comment faire ?

    PS: Je pensais utiliser la méthode setSelectedItem() appliquée à ma JCombobox, le problème c'est qu'elle n'autiorise pas la sélection multiple.
    Je pensais également mettre en place un ComboboxModel, mais je narrive pas à comprendre comment il peut me venir en aide.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Si ma mémoire est bonne, le JComboBox ne permet de sélectionner qu'un seul élément. En conséquence, il faut utiliser une JList pour en sélectionner plusieurs.

  6. #6
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 251
    Points
    1 251
    Par défaut
    Hum je pense que tu as raison.

    Mais tout l'intérêt pour moi de mettre un JCheckBox dans ma JComboBox c'est justement de finter ceci.
    Il faut donc que je me penche un peu plus pour réussir mon opération. Je suis à peu près sûr de l'avoir déjà vu, mais je ne sais plus si c'était en Java !

    Bref, je reste ouvert à toute proposition de solution, et encore merci pour votre aide.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Si ton besoin est uniquement de pouvoir selectionner plusieurs éléments utilise une JList.

  8. #8
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 251
    Points
    1 251
    Par défaut
    Mon besoin est d'afficher une série de listes (dont le nombre est indéterminé à la base, et qui peut être de plusieurs dizaines, voir pourquoi pas de plusieurs centaines...) les unes en dessous des autres.
    Dans chacune de ces listes l'utilisateur doit pouvoir, si il le désire, sélectionner un ou plusieurs (ou tous ou aucun) éléments, afin d'appliquer des filtres au reste de son travail.

    En gros pour schématiser avec quelque chose de clair, imagine que mon utilisateur vient d'ouvrir une photo d'un groupe de personnes avec mon logiciel. Sur le côté de son image apparaîssent plusieurs liste qui lui permettent de faire disparaître (remplacer par du blanc) certains éléments de l'image. Dans ces listes tu vas en trouver une qui liste les couleurs, dans une autre les vêtements, dans une autre les organes (oreilles, yeux, bouches,nez...) etc... L'utilisateur a alors tout le loisir d'observer normalement sa photo, ou alors de la voir sans le rouge, ou encore sans le rouge, le vert, les nez, les cheveux et les chaussures.

    Si j'affiche mes listes sur plusieurs lignes (comptons 3 au minimum pour être utilisables facilement par l'utilisateur), alors je me retrouve vite avec un panneau de contrôle assez immense sur la droite. En revanche je conserve une taille résonnable en affichant des listes de 5 ou 7 éléments... seulement quand on leur clique dessus, bref en affichant des listes déroulantes.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Je te propose de fonctionner différemment en utilisant un JPopupMenu dans le quel tu peux inserer des JMenu, JMenuItem, JCheckboxMenuItem et JRadioButtonMenuItem.

    Ainsi tu allege ton interface en gardan toutes le fonctionnalités.

    Voila un bon site pour des explications :
    http://java.sun.com/docs/books/tutor...ents/menu.html

  10. #10
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 251
    Points
    1 251
    Par défaut
    Je veux bien changer mon interface, mais j'ai aussi un cahier des charges avec des exigences du client... et je ne peux pas lui remplacer un panneau de contrôle sur la droite de l'écran en un menu déroulant !

  11. #11
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 251
    Points
    1 251
    Par défaut
    Bien...
    Voici le "renderer" que j'ai utilisé pour ma JList.
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    /**
     * @author leminipouce
     *      This class displays a checkbox and a text side-by-side in the list where
     *      it is used as a renderer.
     */
    public class DropDownListRenderer extends JCheckBox implements ListCellRenderer, MouseListener { 
    	/** Usefull for serialization */
    	private static final long serialVersionUID = -156435997361540224L;
    	private int attributeIndex=0;
    	private JPanel filterPanel=null;
     
    	public DropDownListRenderer(int index, JPanel panel)
    	{
    		super();
     
    		attributeIndex=index;      //The index corresponding to this attribute list
    		filterPanel=panel;            //The panel where the JList is displayed
    	}
     
    	public Component getListCellRendererComponent( 
           JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { 
     
    		boolean[][] userSelection = MySoft.getModel().getNominalAttributeUserSelection();
     
    		if (isSelected) { 
               setBackground(list.getSelectionBackground()); 
               setForeground(list.getSelectionForeground()); 
          }else{ 
               setBackground(list.getBackground()); 
               setForeground(list.getForeground()); 
          }
     
    		//Check the checkbox if the filter has been selected
    		if(!userSelection[attributeIndex][index])
    			setSelected(false);
    		else
    			setSelected(true);
     
          setText((value == null) ? "Empty" : value.toString());
          setEnabled(list.isEnabled()); 
          setFont(list.getFont()); 
     
          return this; 
       }
     
    	public void mouseClicked(MouseEvent e)
    	{
    		MySoft.getModel().changeNominalAttributeUserSelection(attributeIndex,((JList)e.getSource()).getSelectedIndex());
    		getListCellRendererComponent((JList)e.getSource(),this.getText(),((JList)e.getSource()).getSelectedIndex(),true,true);
    	}
     
    	public void mousePressed(MouseEvent arg0)
    	{}
     
    	public void mouseReleased(MouseEvent arg0)
    	{}
     
    	public void mouseEntered(MouseEvent e)
    	{
    		JList source = (JList)e.getSource();
     
    		source.setVisibleRowCount(6);
    		filterPanel.updateUI();
    	}
     
    	public void mouseExited(MouseEvent e)
    	{
    		JList source = (JList)e.getSource();
     
    		source.setVisibleRowCount(1);
    		filterPanel.updateUI();
    	} 
    }
    Le problème, c'est que ça fait une interface "qui bouge" quand l'utilisateur survole une des listes toutes celles qui sont en dessous dans mon JPanel descendent...
    Ensuite une JList qui s'tend, c'est quand même moins convivial qu'une Combobox je reviens donc sur mon idée initiale, à savoir comment ajouter une icône de JCheckBox à une JComboBox.
    PS: Je ne regarde pas du tout l'état de ma JComboBox (ligne sélectionnée ou pas...) pour définir l'état de chaque ComboBox j'utilise un tableau de booléen.
    J'ai tenté de mettre directement mon booléen dans ma comboBox, mais il m'affiche "true" ou "false" au lieu d'une case à cocher. Et si je mets une JCheckBox, il utilise la méthode toString() de cette dernière pour l'afficher (bref le nom de l'objet et tous ses attributs...)

Discussions similaires

  1. [XUP] 2up ou XP ou bien les deux dans le processus de développement
    Par nabilblk dans le forum Méthodes Agiles
    Réponses: 4
    Dernier message: 01/11/2007, 19h58
  2. [swing][Buffered Image] memoire et lenteur sont les deux ...
    Par pierre.zelb dans le forum AWT/Swing
    Réponses: 16
    Dernier message: 17/08/2005, 09h38
  3. Association navigables dans les deux sens
    Par DarkNagash dans le forum Diagrammes de Classes
    Réponses: 4
    Dernier message: 13/07/2005, 15h11
  4. [JCheckBox] Récuperer les valeurs
    Par Regis.C dans le forum Composants
    Réponses: 3
    Dernier message: 12/04/2005, 21h19
  5. Connaitre les deux premier chiffres d'un input
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/01/2005, 16h50

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