2015-04-09 3 views
0

я мог не найти другой способ затем:JComboBox выбранный фон элемент и Windows, L & F

UIManager.put("ComboBox.background",new Color(31,0,104)); 
UIManager.put("ComboBox.selectionBackground",new Color(31,0,104)); 

установить фоновый цвет выбранного элемента в JComboBox. К сожалению, это будет работать одинаково для всех списков в окне, которое я не хочу.

Это, как он в настоящее время работает: PICTURE

Это, как я хочу, чтобы вести себя: PICTURE

Я попытался создать пользовательские DefaultListCellRenderer и вызвать setBackground там, но это не помогло. Я также попытался переопределить BasicComboBoxUI, но я, вероятно, не могу использовать этот метод для достижения результата.

EDIT: Это короткая часть моего кода в соответствии с предложением, но это не помогло

public void colorizeComboBox(){ 

    jComboBox1.setRenderer(new ColourListCellRenderer()); 
    jComboBox1.setUI(new BasicComboBoxUI(){ 
     @Override 
     protected JButton createArrowButton() { 
      JButton b = this.createCustomArrowButton(); 
      b.setContentAreaFilled(false); 
      b.setBackground(new Color(31,0,104)); 
      b.setBorder(BorderFactory.createEmptyBorder()); 
      return b; 
     } 


     public JButton createCustomArrowButton() { 
       JButton b=new JButton(new ImageIcon(getClass().getResource("/server/Pictures/arrowdown.png"))); 
       b.setBorder(new EmptyBorder(0, 0, 0, 0)); 
       b.setOpaque(true); 
       return b; 
     } 
    }); 

и пользовательский визуализатор:

public static class ColourListCellRenderer extends DefaultListCellRenderer { 


    @Override 
    public Color getBackground() { 
     return new Color(31,0,104); 
    } 


} 

, но все изменилось теперь, что фон текущий выбранный элемент WHITE.

Ok, наконец, нашли решение:

jComboBox1.setUI(new BasicComboBoxUI(){ 


     @Override 
     public void paintCurrentValueBackground(Graphics g,Rectangle bounds,boolean hasFocus){ 

      Color t = g.getColor(); 
      if (comboBox.isEnabled()) 
       g.setColor(new Color(31,0,104)); 
      else 
       g.setColor(DefaultLookup.getColor(comboBox, this, 
             "ComboBox.disabledBackground", null)); 
      g.fillRect(bounds.x,bounds.y,bounds.width,bounds.height); 
      g.setColor(t); 
     } 






    }); 
    jComboBox1.setFocusable(false); 

мне пришлось переопределить paintCurrentValueBackground (..) в BasicComboBoxUI, затем установите этот интерфейс в поле со списком, но акцент все еще делает проблему и живописи комбо BOXX к серому, поэтому я отключил фокус на этом combobox

+0

Пожалуйста, объясните, что вы хотите. Вы хотите, чтобы выбранная строка выглядела как невыбранная? –

+2

При вызове 'ListCellRenderer' передается' -1' (я думаю) для значения item 'index', когда он отображает« выбранное »значение. Вы можете попробовать выполнить какой-то специальный рендеринг, когда это произойдет ... – MadProgrammer

+0

Нехороший вопрос, совершенно неправильное решение – mKorbel

ответ

0

Переопределить метод getBackground и getListCellRendererComponent по умолчаниюListCellRenderer.

public class ColoredListCellRenderer extends DefaultListCellRenderer { 

    private Color selectedColor; 
    private Color backgroundColor; 
    private Color lastColor; 

    public ColoredListCellRenderer(Color backgroundColor, Color selectedColor) { 
     this.selectedColor = selectedColor; 
     this.backgroundColor = backgroundColor; 
     lastColor = backgroundColor; 
    } 

    @Override 
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { 
     Component c = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); 
     if (isSelected) { 
      lastColor = selectedColor; 
     } else { 
      lastColor = backgroundColor; 
     } 
     c.setBackground(lastColor); 
     return c; 
    } 

    @Override 
    public Color getBackground() { 
     return lastColor; 
    } 

} 
+0

Я пробовал ваше решение, но кажется, что он просто меняет фон выбранного элемента на белый. Seem мой отредактированный пост –

+0

Он должен работать сейчас, как вы хотели :) – FINDarkside

+0

@ Ľubomír DjBore-c Kovalčík Focus также будет работать с этим – FINDarkside

 Смежные вопросы

  • Нет связанных вопросов^_^