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 :

Background d'une JComboBox éditable


Sujet :

AWT/Swing Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 19
    Par défaut Background d'une JComboBox éditable
    Bonjour à tous,


    Mon besoin final (assez simple) : j'ai une JComboBox éditable, de sorte à ce que l'utilisateur y saisisse un genre d'expression régulière, à utiliser dans une recherche.
    ==> je souhaiterais "valider" en live l'expression en cours de saisie, en plaçant le fond de mon JTextField (associé à la combo) en vert ou en rouge, suivant la valeur couramment saisie.

    Ma question : comment affecter une couleur de fond à la zone de saisie ???

    J'ai essayé pas mal de trucs, sachant qu'un renderer ne concernerait que la liste déroulante, mais pas cette zone de saisie.
    Pour moi, la solution me paraît très simple, mais pourtant ne marche pas !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    JComboBox cb = new JComboBox();
    cb.setEditable(true);
    cb.getEditor().getEditorComponent().setBackground(Color.RED);
    Quelqu'un aurait une idée ???

  2. #2
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Par défaut
    Salut,

    Pour un résultat correct (ne pas avoir aussi la couleur sur le bouton de dépliage de la combo), tu peux utiliser ton propre ComboBoxEditor.

    Voici un exemple vite fait :
    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
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.event.ActionListener;
    import javax.swing.ComboBoxEditor;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JTextField;
     
    public class Test {
     
    	public static void main(String[] args) {
    		JFrame frame = new JFrame();
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		JComboBox cb = new JComboBox();
    		cb.setEditable(true);
    		cb.addItem("element 1");
    		cb.addItem("element 2");
    		cb.addItem("element 3");
    		ComboBoxEditor editor = new MyEditor();
    		cb.setEditor(editor);
     
    		frame.getContentPane().add(cb);
    		frame.pack();
    		frame.setVisible(true);
    	}
     
     
    }
     
    class MyEditor implements ComboBoxEditor {
     
    	private JTextField tf ;
     
    	public MyEditor() {
    		tf = new JTextField(15);
    		tf.setBackground(Color.YELLOW);
    	}
     
    	@Override
    	public Component getEditorComponent() {
    		return tf ;
    	}
     
    	@Override
    	public void setItem(Object anObject) {
    		tf.setText(anObject.toString());
    	}
     
    	@Override
    	public Object getItem() {
    		return tf.getText();
    	}
     
    	@Override
    	public void selectAll() {
    		tf.selectAll() ;
    	}
     
    	@Override
    	public void addActionListener(ActionListener l) {
    		tf.addActionListener(l) ;
    	}
     
    	@Override
    	public void removeActionListener(ActionListener l) {
    		tf.removeActionListener(l) ;
    	}
     
    }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 19
    Par défaut
    MERCI, ÇA MARCHE NICKEL !!!

    Juste une p'tite précision (pour parfaire le code ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        @Override
        public void setItem(Object anObject) {
            tf.setText(anObject.toString());
        }
    devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     @Override
        public void setItem(Object anObject) {
            tf.setText(anObject != null 
                ? anObject.toString()
                : null);
        }

    Et une p'tite interrogation, tout de même :
    Pourquoi est-il nécessaire d'implémenter une class ComboBoxEditor, et pourquoi alors mon code ne marchait-il pas comme ça ???

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

Discussions similaires

  1. Attribuer une valeur à un JComboBox éditable
    Par Ceubex dans le forum Général Java
    Réponses: 1
    Dernier message: 13/08/2011, 16h33
  2. JcomboBox éditable dans une JTable
    Par bigbrowzer dans le forum Composants
    Réponses: 1
    Dernier message: 14/12/2009, 10h33
  3. [JCombobox] modif d'une jcombobox par rapport à une autre
    Par The Wretched dans le forum Composants
    Réponses: 2
    Dernier message: 21/03/2005, 10h35
  4. [MFC] Background D'une TabControl
    Par Muby53 dans le forum MFC
    Réponses: 4
    Dernier message: 13/11/2004, 22h34
  5. Couleur d'une JComboBox disabled
    Par ced dans le forum Composants
    Réponses: 6
    Dernier message: 06/01/2004, 15h33

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