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 :

Comment colorier un JComboBox


Sujet :

AWT/Swing Java

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2022
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2022
    Messages : 43
    Par défaut Comment colorier un JComboBox
    Bonjour,

    Dans l'exemple qui suit, j'affiche un combo dont je colorie chaque partie avec des couleurs différentes ceci sans problème en mode setEdit(true).

    Par contre impossible de colorier la partie ""zone d'entrée" avec setEdit(false) (car je ne dois pas donner la possibilité de modifier le texte).

    Si vous avez des idées merci d'avance.
    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
     
    import javax.swing.*;
    import java.awt.*;
     
    public class CustomComboBox
    {
    	public static void main(String[] args)
    	{
    		String[] items = {  "Bananes", "Cerises", "Oranges", "Pommes" };
     
    		JFrame frame = new JFrame("JComboBox Custom Colors");
    			frame.setSize(213, 200);
    			frame.getContentPane().setLayout(null);
     
    		JButton Finish = new JButton("Fin");
    			Finish.addActionListener(e -> System.exit(0));
    			Finish.setBounds(43, 133, 100, 23);
     
    		JComboBox<String> comboBox = new JComboBox<>(items);
    			comboBox.setBounds(43, 23, 101, 20);
    			comboBox.setRenderer(new DefaultListCellRenderer()
    			{
    				private static final long serialVersionUID = 1L;
    				@Override
    				public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected,
    					boolean cellHasFocus)
    				{
    					Component renderer = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
    					renderer.setForeground(Color.BLACK);
    					renderer.setBackground(Color.pink);
    					return renderer;
    				}
    			});
     
    			JPanel panel = new JPanel();
    				panel.setLayout(null);
    				panel.setBounds(10, 10, 193, 179);
    				panel.setBackground(new Color(102, 205, 170));
    				panel.add(comboBox);
    				panel.add(Finish);
     
    			frame.getContentPane().add(panel);
     
    		// coloring  the entry field
    		ComboBoxEditor cedit = comboBox.getEditor();
    		JTextField texte = (JTextField) cedit.getEditorComponent();
    		texte.setBackground(Color.green);
    		texte.setForeground(Color.red);
    		cedit.setItem(texte);
    		comboBox.setEditor(cedit);
     
    		/*   if je change  par  "false" la partie texte n'est plus coloriée mais le reste l'est toujours.   */
    		comboBox.setEditable(true); 
                    // comboBox.setEditable(false); 
    		/*                                                                          */
     
    		frame.setUndecorated(true);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
    	}
    }

  2. #2
    Membre éprouvé
    Homme Profil pro
    Admin systèmes (Windows, Linux) et réseaux - Dev DB &Java IHM calcul scientifique
    Inscrit en
    Mai 2016
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Admin systèmes (Windows, Linux) et réseaux - Dev DB &Java IHM calcul scientifique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2016
    Messages : 81
    Par défaut
    Bonjour,

    J'ai jeté un coup d'oeil.

    D'après la doc il ne faut pas que le JComboBox soit éditable pour que le renderer soit utilisé

    Après avoir remarqué que l'index prend la valeur -1 pour le contenu affiché de la valeur du JComboBox,
    j'ai modifié le code du Renderer, mais le changement de couleurs ne s'appliquent que lorsque la liste est déroulée :-(

    Il y a peut-être une piste pas là..
    Cordialement


    Partie du code concernée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
                                            Component renderer = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
                                            if(index >=0){
                                                renderer.setForeground(Color.BLACK);
                                                renderer.setBackground(Color.pink);
                                            } else {
                                                System.out.println("index = " + index + value) ;
                                                renderer.setForeground(Color.red);
                                                renderer.setBackground(Color.green);
                                            }
    Le code complet intégrant ma modif

    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
    74
    75
    76
    77
    78
    79
    80
    81
     
     
    package customcombobox;
     
    import java.awt.Color;
    import java.awt.Component;
    import javax.swing.DefaultListCellRenderer;
    import javax.swing.JButton;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JList;
    import javax.swing.JPanel;
     
    /**
     *
     * @author dc
     */
            public class CustomComboBox
            {
            	public static void main(String[] args)
            	{
            		String[] items = {  "Bananes", "Cerises", "Oranges", "Pommes" };
     
            		JFrame frame = new JFrame("JComboBox Custom Colors");
            			frame.setSize(213, 200);
            			frame.getContentPane().setLayout(null);
     
            		JButton Finish = new JButton("Fin");
            			Finish.addActionListener(e -> System.exit(0));
            			Finish.setBounds(43, 133, 100, 23);
     
            		JComboBox<String> comboBox = new JComboBox<>(items);
     
                            comboBox.setBounds(43, 23, 101, 20);
                            comboBox.setForeground(Color.red);
                            comboBox.setBackground(Color.green);
     
                            for(int i = 0 ; i < comboBox.getComponentCount(); ++i){
                                String s = comboBox.getComponent(i).getClass().toString() ;
                                System.out.println("i = 0 " + s) ;
                            }
                            comboBox.setRenderer(new DefaultListCellRenderer()
                            {
                                    private static final long serialVersionUID = 1L;
                                    @Override
                                    public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected,
                                            boolean cellHasFocus)
                                    {
                                            Component renderer = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
                                            if(index >=0){
                                                renderer.setForeground(Color.BLACK);
                                                renderer.setBackground(Color.pink);
                                            } else {
                                                System.out.println("index = " + index + value) ;
                                                renderer.setForeground(Color.red);
                                                renderer.setBackground(Color.green);
                                            }
     
                                            return renderer;
                                    }
                            });
     
                            JPanel panel = new JPanel();
                                    panel.setLayout(null);
                                    panel.setBounds(10, 10, 193, 179);
                                    panel.setBackground(new Color(102, 205, 170));
                                    panel.add(comboBox);
                                    panel.add(Finish);
     
                            frame.getContentPane().add(panel);
     
            		/*   if je change  par  "false" la partie texte n'est plus coloriée mais le reste l'est toujours.   */
    //        		comboBox.setEditable(true); 
                             comboBox.setEditable(false); 
            		/*                                                                          */
     
            		frame.setUndecorated(true);
            		frame.setLocationRelativeTo(null);
            		frame.setVisible(true);
            	}
            }

Discussions similaires

  1. Comment colorier une portion de texte dans un TSynMemo ?
    Par Henri-gp dans le forum Composants VCL
    Réponses: 0
    Dernier message: 29/10/2007, 16h14
  2. Comment colorier un arc avec gtk
    Par Redmaroc dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 23/04/2007, 11h32
  3. Comment colorier le texte d'un contrôle ou son fond?
    Par N3odyme dans le forum Windows
    Réponses: 2
    Dernier message: 15/10/2006, 17h50
  4. Réponses: 7
    Dernier message: 15/05/2006, 17h44

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