djok_fb C'était mieux avant! | Je voudrais faire une combobox avec des éléments colorés inside...
Ca marche nickel sauf une fois qu'on a choisi un élément, l'élément choisi prend bien le nouveau texte (confère CellRenderer) mais pas les nouvelles couleurs (dans le test, j'ai écrit en dur: Color.black).
Sur le forum Sun, j'ai lu que le Look & Feel avait la priorité (cet enf**** passe après mon renderer).
J'ai aussi lu, qu'il fallait utiliser l'Editor (mais j'ai pas les bons objets ou alors je sais pas m'en servir (confère le code en commentaire dans le ActionListener)).
Faut-il que je fasse mon propre look & feel ou il y a une méthode simple?
Code :
- import java.awt.*;
- import java.awt.event.*;
- import javax.swing.*;
- public class JColorComboBox extends JComboBox implements ActionListener
- {
- public Color [] colorsList;
-
- public JColorComboBox(Color [] cl)
- {
- super();
- colorsList = cl;
- ColorComboRenderer renderer = new ColorComboRenderer();
- for (int i=0;i<cl.length;i++)
- {
- JLabel lbl = new JLabel("COLOR" );
- lbl.setBackground(cl[i]);
- lbl.setForeground(cl[i]);
- this.addItem(lbl);
- }
- this.addActionListener(this);
- this.setRenderer(renderer);
- }
- public class ColorComboRenderer extends DefaultListCellRenderer
- {
-
- public class ColorComboRenderer extends DefaultListCellRenderer
- {
-
- public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
- {
- ColorComboRenderer c = (ColorComboRenderer)(super.getListCellRendererComponent(list, value, index, isSelected,cellHasFocus));
- if (index==-1)
- {
- c.setText("SELECT" );
- c.setBackground( Color.BLACK );
- c.setForeground( Color.BLACK );
- }
- else
- {
- c.setText("COLOR" );
- c.setBackground( ((JLabel)value).getBackground() );
- c.setForeground( ((JLabel)value).getBackground() );
- }
- return c;
- }
- }
- public void actionPerformed(ActionEvent e)
- {
-
- //((JLabel)this.getEditor().getEditorComponent()).setBackground(colorsList[this.getSelectedIndex()]);
- //((JLabel)this.getEditor().getEditorComponent()).setForeground(colorsList[this.getSelectedIndex()]);
- }
-
- }
|
|