JComboBox Schriftfarbe

tabina

Mitglied
Hallo zusammen!

Ich möchte die Einträge in einer ComboBox farbig unterscheiden.
Die ComboBox enthält die Einträge "A", "B" bis "F" und jeder einzelne Eintrag wird mit einer anderen Schriftfarbe dargestellt. Das habe ich mit einem ListCellRenderer realisiert. Funktioniert auch ohne Probleme, nur dass der ausgewählte Eintrag (der im Hauptfeld) dann wieder mit Schriftfarbe schwarz gezeichnet wird.

Code:
  class LabelCellRenderer extends JLabel implements ListCellRenderer
  {

    protected DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();

    @Override
    public Component getListCellRendererComponent(JList list, Object value, int index,
            boolean isSelected, boolean cellHasFocus)
    {
      JLabel renderer = (JLabel) defaultRenderer.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);

      Color foreground = PolygonDialog.getColorForLabel((String) value);
      renderer.setForeground(foreground);
      list.setForeground(foreground);
      return renderer;
    }
  }

Wie bekomme ich das hin, dass der ausgewählte Eintrag dann auch in der entsprechenden Farbe gezeichnet wird?

Gruß,

tabina
 
Code:
labelComboBox.getEditor().getEditorComponent().setForeground(color);

funktioniert bei mir übrigens nicht.

Die ComboBox ist nicht editierbar.
 
Hm, ich nehme an du musst extra schauen, ob das jeweile Item ausgewaehlt ist, und dann die Farbe zuweisen.
Schau ma hier
http://forums.sun.com/thread.jspa?threadID=763438&tstart=22155
Da machen die folgendes, zwar mit background, aber das sollte fuer die Schriftfarbe, net viel anders sein.
Java:
   private void jcbCoursesFocusGained (java.awt.event.FocusEvent evt)                                       
    {                                           
        defaultColour = jcbCourses.getBackground ();
        
        jcbCourses.setRenderer (new DefaultListCellRenderer ()
        {
            public Component getListCellRendererComponent (JList list,
                Object value,
                int index,
                boolean isSelected,
                boolean cellHasFocus)
            {
                Component c = super.getListCellRendererComponent (list, value,
                    index,
                    isSelected,
                    cellHasFocus);
                                
                //sets selected item background colour
                if(isSelected)
                    c.setBackground (Color.green);
                              
                //sets the displayed item background colour
                list.setSelectionBackground (Color.green);
                return c;
            }
        });      
    }  
    
    private void jcbCoursesFocusLost (java.awt.event.FocusEvent evt)                                     
    {                                         
        jcbCourses.setBackground (defaultColour);  
    }

Oder hier http://forums.sun.com/thread.jspa?threadID=753194
Java:
combo.setBackground(Color.red);
combo.setRenderer(new DefaultListCellRenderer()	{
	public Component getListCellRendererComponent(JList list,
                Object value,
                int index,
                boolean isSelected,
                boolean cellHasFocus)
		{
			Component c = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
				
			if(isSelected)
				c.setBackground(Color.ORANGE);
			else
				c.setBackground(Color.MAGENTA);
				
			return c;
		}
	});
 
Zuletzt bearbeitet:
Ok, hab die einfache Lösung natürlich übersehen.
Mit
Code:
labelComboBox.setForeground(color);
klappts.

Gruß,

tabina
 
Hm, ich nehme an du musst extra schauen, ob das jeweile Item ausgewaehlt ist, und dann die Farbe zuweisen.
Schau ma hier
http://forums.sun.com/thread.jspa?threadID=763438&tstart=22155
Da machen die folgendes, zwar mit background, aber das sollte fuer die Schriftfarbe, net viel anders sein.
Java:
   private void jcbCoursesFocusGained (java.awt.event.FocusEvent evt)                                       
    {                                           
        defaultColour = jcbCourses.getBackground ();
        
        jcbCourses.setRenderer (new DefaultListCellRenderer ()
        {
            public Component getListCellRendererComponent (JList list,
                Object value,
                int index,
                boolean isSelected,
                boolean cellHasFocus)
            {
                Component c = super.getListCellRendererComponent (list, value,
                    index,
                    isSelected,
                    cellHasFocus);
                                
                //sets selected item background colour
                if(isSelected)
                    c.setBackground (Color.green);
                              
                //sets the displayed item background colour
                list.setSelectionBackground (Color.green);
                return c;
            }
        });      
    }  
    
    private void jcbCoursesFocusLost (java.awt.event.FocusEvent evt)                                     
    {                                         
        jcbCourses.setBackground (defaultColour);  
    }

Oder hier http://forums.sun.com/thread.jspa?threadID=753194
Java:
combo.setBackground(Color.red);
combo.setRenderer(new DefaultListCellRenderer()	{
	public Component getListCellRendererComponent(JList list,
                Object value,
                int index,
                boolean isSelected,
                boolean cellHasFocus)
		{
			Component c = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
				
			if(isSelected)
				c.setBackground(Color.ORANGE);
			else
				c.setBackground(Color.MAGENTA);
				
			return c;
		}
	});

Hallo MiMi,

danke für die Antwort. Bin quasi zeitgleich auf die gleiche Lösung gekommen...
 
Na dann :D Hauptsache du hast ne Loesung und es funktioniert.
Danke fuer die Rueckmeldung :)
 

Neue Beiträge

Zurück