я мог не найти другой способ затем: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
Пожалуйста, объясните, что вы хотите. Вы хотите, чтобы выбранная строка выглядела как невыбранная? –
При вызове 'ListCellRenderer' передается' -1' (я думаю) для значения item 'index', когда он отображает« выбранное »значение. Вы можете попробовать выполнить какой-то специальный рендеринг, когда это произойдет ... – MadProgrammer
Нехороший вопрос, совершенно неправильное решение – mKorbel