title: Set Background of JComboBox in Swing
body: <p>I want a JComboBox without a arrow button (done), which has a green background, when enabled and a gray background when disabled (not done). I also use a custom renderer for the drop down list (done)</p>
  
  <p>I checked the source code of BasicComboBoxUI and tried to override some methods, but nothing happens. The dropdown always has a gray/blue background. </p>
  
  <p>Here is a SSCCE with my last attempts. I tried everything I could think of. Please give me a hint, I'm lost.</p>
  
  <pre><code>    import java.awt.Color;
  import java.awt.Component;
  import java.awt.Graphics;
  import java.awt.Rectangle;
  
  import javax.swing.BorderFactory;
  import javax.swing.DefaultComboBoxModel;
  import javax.swing.DefaultListCellRenderer;
  import javax.swing.JButton;
  import javax.swing.JComboBox;
  import javax.swing.JComponent;
  import javax.swing.JFrame;
  import javax.swing.JList;
  import javax.swing.JPanel;
  import javax.swing.JScrollPane;
  import javax.swing.SwingUtilities;
  import javax.swing.plaf.basic.BasicComboBoxUI;
  
  public class DropDownBackground
  {
      public static void main(final String[] args)
      {
          SwingUtilities.invokeLater(new Runnable()
          {
  
              public void run()
              {
                  final JComboBox dropdown = new JComboBox(new DefaultComboBoxModel(new String[] { "one", "two", "three" }));
                  dropdown.setRenderer(new ComboBoxListCellRenderer());
                  dropdown.setUI(new BasicComboBoxUI()
                  {
                      @Override
                      public void paint(final Graphics g, final JComponent c)
                      {
  
                          final Rectangle r = this.rectangleForCurrentValue();
                          this.paintCurrentValueBackground(g, r, true);
                          this.paintCurrentValue(g, r, true);
  
                      }
  
                      @Override
                      public void paintCurrentValueBackground(final Graphics g, final Rectangle bounds, final boolean hasFocus)
                      {
                          final Color t = g.getColor();
                          if (this.comboBox.isEnabled())
                              g.setColor(Color.GREEN);
                          else
                              g.setColor(Color.GRAY);
                          g.fillRect(bounds.x, bounds.y, bounds.width, bounds.height);
                          g.setColor(t);
                      }
  
                      @Override
                      protected JButton createArrowButton()
                      {
                          return new JButton()
                          {
                              @Override
                              public int getWidth()
                              {
                                  return 0;
                              }
                          };
                      }
                  });
                  dropdown.setBackground(Color.GREEN);
                  final JPanel p = new JPanel();
                  p.add(dropdown);
  
                  final JFrame f = new JFrame();
                  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                  f.getContentPane().add(new JScrollPane(p));
                  f.setSize(800, 200);
                  f.setLocation(0, 0);
  
                  f.setVisible(true);
  
              }
          });
  
      }
  
      public static class ComboBoxListCellRenderer extends DefaultListCellRenderer
      {
          /**
           * 
           */
          private static final long serialVersionUID = 1L;
  
          @Override
          public Component getListCellRendererComponent(final JList list, final Object value, final int index, final boolean isSelected, final boolean cellHasFocus)
          {
              this.setToolTipText((String) value);
              if (isSelected)
              {
                  this.setBackground(Color.RED);
                  this.setForeground(Color.WHITE);
              }
              else
              {
                  this.setBackground(Color.WHITE);
                  this.setForeground(Color.BLACK);
              }
  
              this.setText((String) value);
              this.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
  
              return this;
          }
      }
  
  }
  </code></pre>