[SWING] : Changer la couleur de sélection dans un JComboBox

Le
Foub31400
Bonjour,

je souhaiterais pouvoir changer la couleur de sélection dans un
JComboBox.
Comment puis-je faire cela ?

Merci beaucoup.
F.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Michel
Le #226873
Bonjour,

je souhaiterais pouvoir changer la couleur de sélection dans un
JComboBox.
Comment puis-je faire cela ?

Merci beaucoup.
F.

Bonjour


peut-être en appliquant un Renderer à ta JComboBox.

import java.awt.Color;
import java.awt.Component;
import java.awt.GraphicsConfiguration;
import java.awt.HeadlessException;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;

/**
*
*/

/**
* @author Propriétaire
*
*/
public class Application extends JFrame {

/**
* @throws HeadlessException
*/
public Application() throws HeadlessException {
// TODO Auto-generated constructor stub
init();
}


private void init()
{
String[] tabStr = {"aaaaaa","bbbbbbbbbb","cccccccc","dddddddddd"};
JComboBox combo = new JComboBox(tabStr);
combo.setRenderer(new ComboRenderer ());
getContentPane().add(combo);


addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});

pack();
setVisible(true);
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new Application();

}

}

class ComboRenderer extends JLabel implements ListCellRenderer {
Color mycolor;
int myindex;
boolean isselected;

public ComboRenderer() {
setOpaque(true);
mycolor = null;
}

public void setForeground(Color col) {
super.setForeground(col);
if(this.mycolor == null) {
this.mycolor = col;
}
}

public void setBackground(Color col) {
super.setBackground(col);
}

public Color getBackground() {
if(myindex >= 0) {
// Return background for the items in popup
if(isselected) {
return Color.red;
} else {
return Color.lightGray;
}
} else {
// For the item not in popup
// return the background set by ComboBox
return super.getBackground();
}
}

public Color getForeground() {
if(this.mycolor != null) {
return this.mycolor;
} else {
return super.getForeground();
}
}

public Component getListCellRendererComponent(JList pList,
Object pValue,
int pIndex,
boolean pSelected,
boolean pHasFocus) {
setText((String) pValue);

this.myindex = pIndex;
this.isselected = pSelected;

setForeground(mycolor);

return this;
}
}

Foub31400
Le #226872
On 10 mar, 21:01, Michel
Foub31400 a écrit :> Bonjour,

je souhaiterais pouvoir changer la couleur de sélection dans un
JComboBox.
Comment puis-je faire cela ?

Merci beaucoup.
F.


Bonjour

peut-être en appliquant un Renderer à ta JComboBox.

import java.awt.Color;
import java.awt.Component;
import java.awt.GraphicsConfiguration;
import java.awt.HeadlessException;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;

/**
*
*/

/**
* @author Propriétaire
*
*/
public class Application extends JFrame {

/**
* @throws HeadlessException
*/
public Application() throws HeadlessException {
// TODO Auto-generated constructor stub
init();
}

private void init()
{
String[] tabStr = {"aaaaaa","bbbbbbbbbb","cccccccc","dd dddddddd"};
JComboBox combo = new JComboBox(tabStr);
combo.setRenderer(new ComboRenderer ());
getContentPane().add(combo);

addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});

pack();
setVisible(true);
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new Application();

}

}

class ComboRenderer extends JLabel implements ListCellRenderer {
Color mycolor;
int myindex;
boolean isselected;

public ComboRenderer() {
setOpaque(true);
mycolor = null;
}

public void setForeground(Color col) {
super.setForeground(col);
if(this.mycolor == null) {
this.mycolor = col;
}
}

public void setBackground(Color col) {
super.setBackground(col);
}

public Color getBackground() {
if(myindex >= 0) {
// Return background for the items in popup
if(isselected) {
return Color.red;
} else {
return Color.lightGray;
}
} else {
// For the item not in popup
// return the background set by ComboBox
return super.getBackground();
}
}

public Color getForeground() {
if(this.mycolor != null) {
return this.mycolor;
} else {
return super.getForeground();
}
}

public Component getListCellRendererComponent(JList pList,
Object pValue,
int pIndex,
boolean pSelected,
boolean pHasFocus) {
setText((String) pValue);

this.myindex = pIndex;
this.isselected = pSelected;

setForeground(mycolor);

return this;
}

}


Merci beaucoup,
C'est exactement ce qu'il me fallait ;-)

F.


Publicité
Poster une réponse
Anonyme