2009-06-01 9 views
1

Je veux définir la couleur de police pour les lignes/entrées dans un JCombobox, unique pour chaque ligne. Donc, fondamentalement, lorsque vous cliquez sur la flèche de la liste déroulante, vous devriez voir quelques lignes qui sont des couleurs différentes, et je veux spécifier les couleurs moi-même en fonction de leurs propriétés. Comment devrais-je faire cela? Merci!Comment faire une couleur de police unique pour les lignes dans un JCombobox?

Répondre

2

Vous devez créer un ListCellRenderer personnalisé en tant que tel:

class Renderer extends JLabel implements ListCellRenderer { 

et mettre en œuvre cette méthode:Ensuite, en fonction de votre source, utilisez this.setForeground (Couleur de couleur) pour définir la couleur de votre texte. Enfin,

return this; 

}

1

Vous pouvez utiliser un ListCellRenderer. Vous devez écrire une classe personnalisée pour cela. Voici le code complet pour définir le premier plan en fonction de l'index (pour éviter les doublons). Vous pouvez également définir un arrière-plan de sélection personnalisé et un arrière-plan pour cela. Voir les commentaires dans le code.

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.util.*; 
class ListCellRendererDemo2 extends JFrame 
{ 
Hashtable<Integer,Color> table; 
JComboBox<String> c; 

    public ListCellRendererDemo2() 
    { 
     createAndShowGUI(); 
    } 

    private void createAndShowGUI() 
    { 
     setTitle("JComboBox Demo"); 
     setLayout(new FlowLayout()); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     table=new Hashtable<Integer,Color>(); 
     table.put(1,Color.RED); 
     table.put(2,Color.BLUE); 
     table.put(3,Color.GREEN); 
     table.put(4,Color.GRAY); 


     c=new JComboBox<String>(); 
     c.addItem("Item 1"); 
     c.addItem("Item 2"); 
     c.addItem("Item 3"); 
     c.addItem("Item 4"); 
     c.addItem("Item 5"); 
     c.addItem("Item 6"); 
     c.addItem("Item 7"); 
     c.addItem("Item 8"); 

     c.setRenderer(new MyListCellRenderer(table)); 

     add(c); 
     setSize(400,400); 
     setVisible(true); 
    } 

    public static void main(String args[]) 
    { 
     SwingUtilities.invokeLater(new Runnable(){ 
      public void run() 
      { 
       new ListCellRendererDemo2(); 
      } 
     }); 
    } 
} 
class MyListCellRenderer extends DefaultListCellRenderer 
{ 
Hashtable<Integer,Color> table; 

    public MyListCellRenderer(Hashtable<Integer,Color> table) 
    { 
     this.table=table; 

     // Set opaque for the background to be visible 
     setOpaque(true); 
    } 

    public Component getListCellRendererComponent(JList jc,Object val,int idx,boolean isSelected,boolean cellHasFocus) 
    { 
     // Set text (mandatory) 
     setText(val.toString()); 

     // Set the foreground according to the selected index 
     setForeground(table.get(idx)); 

      // Set your custom selection background, background 
      // Or you can get them as parameters as you got the table 
      if(isSelected) setBackground(Color.LIGHT_GRAY); 
      else setBackground(Color.WHITE); 

    return this; 
    } 
} 
+0

s'il vous plaît n'est pas là un fil plus ancien, pourquoi réincarner un zombie, +1 pour Initial Thread :-) – mKorbel

Questions connexes