2010-11-12 24 views
5

J'ai un objet JComboBox existant. Je peux modifier beaucoup de ses propriétés en utilisant les méthodes internes. Cependant, je n'ai pas trouvé de méthodes similaires pour personnaliser l'apparence du popup - en particulier, la couleur de fond du popup. J'ai un objet existant, donc je souhaite utiliser ses méthodes/propriétés existantes, pas pour écrire une classe dédiée. Est-ce possible?Puis-je modifier la couleur d'arrière-plan de la popup JComboBox d'un objet existant?

Note: cette question est pas le même que la question liée ci-dessus (qui indique à tort que cette question a déjà une réponse): cette question posée sur le sélectionné bgcolor de l'article (dans la zone d'édition du combobox) ; Je demande à propos de la boîte de dialogue .

+0

Ma question n'est pas la même que la question ci-dessus liée (qui indique à tort que cette question a déjà une réponse): cette question posée sur le * élément sélectionné * 's bgcolor (dans la zone d'édition du combobox); Je demande à propos de bgcolor de * la boîte de la popup *. –

+0

L'autre question [1] a été postée après la mienne - elle n'existait pas quand j'ai posté la mienne. Quant à la réponse, si la réponse que j'ai acceptée ne répond pas directement à ma question (mais plutôt à l'autre question), elle pointe dans la manière apparemment correcte (et vraisemblablement la seule) de résoudre le problème, à savoir classe de rendu de cellule. Personne n'a donné une meilleure réponse dans le mois depuis que j'ai posté ma question, alors j'ai décidé que c'était assez proche et j'ai accepté la réponse. [1]: http://stackoverflow.com/questions/4412902/background-color-of-the-selected-item-in-an-uneditable-jcombobox –

Répondre

3

Comme eugener dit, en utilisant un ListCellRenderer personnalisé est certainement la bonne façon de le faire. Vous avez juste besoin de créer une classe qui s'étend DefaultListCellRenderer. Ce moteur de rendu par défaut étend JLabel donc il ne pourrait pas être plus facile à comprendre! Vous avez juste besoin de faire un appel à setBackground().

JComboBox combo = new JComboBox(new String[] { "A", "B", "C", "D" }); 
combo.setRenderer(new DefaultListCellRenderer() { 
    public void paint(Graphics g) { 
     setBackground(Color.YELLOW); 
     setForeground(Color.RED); 
     super.paint(g); 
    } 
});
+0

Comme je l'ai noté ci-dessus - je souhaite éviter de créer une classe personnalisée. Cependant, puisque c'est la meilleure réponse jusqu'à présent, je l'ai accepté - peut-être qu'il n'y a vraiment pas d'autre moyen de faire ce dont j'ai besoin. Merci à tous pour les efforts. –

+0

Je suis heureux que cela aide. D'une certaine manière, utiliser une classe anonyme comme je l'ai fait élimine le besoin de créer une nouvelle classe Java, ce qui est en partie ce que vous suggérez, mais vraiment, il n'y a pas besoin de créer de nouvelles classes en général. Si vous avez besoin de fonctionnalités personnalisées, créez une classe personnalisée pour le faire afin de pouvoir la réutiliser. C'est comme ça que fonctionne la POO! :) – BoffinbraiN

0

Avez-vous essayé:

comboBox.setBackground(color); 
+0

Non, c'est la bg du combo lui-même, pas le pop- en haut –

1

Il faudrait créer un moteur de rendu comboxbox personnalisé. Plus d'informations est ici: http://download.oracle.com/javase/tutorial/uiswing/components/combobox.html#renderer

+0

Comme je l'ai noté ci-dessus - je souhaite éviter de créer une classe personnalisée. Y a-t-il un moyen d'accéder au composant pop-up en utilisant les propriétés/méthodes existantes? –

+0

Cela ne va pas aider parce que le rendu par défaut rendra sur le dessus de toute façon. –