[Java] JComboBox de couleur

JComboBox de couleur [Java] - Java - Programmation

Marsh Posté le 26-01-2005 à 21:02:27    

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 :
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import javax.swing.*;
  4. public class JColorComboBox extends JComboBox implements ActionListener
  5. {
  6.    public Color [] colorsList;
  7.  
  8.    public JColorComboBox(Color [] cl)
  9.    {
  10.       super();
  11.       colorsList = cl;
  12.       ColorComboRenderer renderer = new ColorComboRenderer();
  13.       for (int i=0;i<cl.length;i++)
  14.       {
  15.          JLabel lbl = new JLabel("COLOR" );
  16.          lbl.setBackground(cl[i]);
  17.          lbl.setForeground(cl[i]);
  18.          this.addItem(lbl);
  19.       }
  20.       this.addActionListener(this);
  21.       this.setRenderer(renderer);
  22.    }
  23.    public class ColorComboRenderer extends DefaultListCellRenderer
  24.    {
  25.      
  26.    public class ColorComboRenderer extends DefaultListCellRenderer
  27.    {
  28.      
  29.       public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
  30.       {
  31.          ColorComboRenderer c = (ColorComboRenderer)(super.getListCellRendererComponent(list, value, index, isSelected,cellHasFocus));
  32.          if (index==-1)
  33.          {
  34.             c.setText("SELECT" );
  35.             c.setBackground( Color.BLACK );
  36.             c.setForeground( Color.BLACK );
  37.          }
  38.          else
  39.          {
  40.             c.setText("COLOR" );
  41.             c.setBackground( ((JLabel)value).getBackground() );
  42.             c.setForeground( ((JLabel)value).getBackground() );
  43.          }
  44.          return c;
  45.       }
  46.    }
  47.    public void actionPerformed(ActionEvent e)
  48.    {
  49.      
  50.       //((JLabel)this.getEditor().getEditorComponent()).setBackground(colorsList[this.getSelectedIndex()]);
  51.       //((JLabel)this.getEditor().getEditorComponent()).setForeground(colorsList[this.getSelectedIndex()]);
  52.    }
  53.  
  54. }

Reply

Marsh Posté le 26-01-2005 à 21:02:27   

Reply

Marsh Posté le 27-01-2005 à 10:47:01    

:up:  
 
un petit up...

Reply

Marsh Posté le 27-01-2005 à 11:15:03    

pourquoi n'utilises-tu pas un JColorChooser ?

Reply

Marsh Posté le 27-01-2005 à 12:09:07    

Parce que je veux quelque chose de plus simple qu'un autre popup...
Si j'arrive pas avoir cette p'tain de combo box, je ferais avec un colorchooser...

Reply

Marsh Posté le 27-01-2005 à 12:11:53    

alors va voir le tutorial sur les javabeans, avec les PropertyEditor

Reply

Marsh Posté le 27-01-2005 à 13:48:35    

pas besoin j'avait fait ca a l'epoque et gfive m'avait aidé
 
je suis sur qu'apres une petite recherche...
 
 
j'essaye


Message édité par veryfree le 27-01-2005 à 13:51:22
Reply

Marsh Posté le 27-01-2005 à 13:51:02    

Reply

Marsh Posté le 27-01-2005 à 15:34:19    

hum merci, j'avais trouvé ce post par une recherche mais j'avais pas lu jusqu'au bout, chuis vraiment un boulet, désolé

Reply

Marsh Posté le 28-01-2005 à 11:10:03    

En fait, mon problème venait du fait que mon renderer dérivait le DefaultListCellRenderer et non pas un JLabel.

Reply

Marsh Posté le 28-01-2005 à 11:25:04    

[:mlc] DefaultListCellRenderer dérive de quoi ?

Reply

Marsh Posté le 28-01-2005 à 11:25:04   

Reply

Marsh Posté le 28-01-2005 à 16:37:45    

de JLabel...hum...c'est bizarre alors...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed