Ich habe JComboBox wo ich ListCellRenderer wie gelte:ListCellRenderer, ausgewählter Wert nicht sichtbar
colorList = new JComboBox<>(COLORS_NAMES);
ColorComboBoxRenderer renderer = new ColorComboBoxRenderer(colorList);
renderer.setColors(COLORS);
renderer.setColorNames(COLORS_NAMES);
colorList.setRenderer(renderer);
es in Modyfing Zellen führen hat, aber ich kann nicht Grund finden, warum ausgewählter Wert in Erinnerung, aber nicht dargestellt. Wie folgt vor:
Hier ist mein Code für Renderer (setColors, getColors etc .. Weglassen)
class ColorComboBoxRenderer extends JPanel implements ListCellRenderer{
JPanel textPanel;
JLabel text;
public ColorComboBoxRenderer(JComboBox combo){
textPanel = new JPanel();
textPanel.add(this);
text = new JLabel();
text.setOpaque(true);
text.setFont(combo.getFont());
textPanel.add(text);
}
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
boolean cellHasFocus) {
if (isSelected){
list.setSelectionBackground(colors[list.getSelectedIndex()]);
}
else{}
if(colors.length != colorNames.length){
System.out.println("colors.length doesn't match colorNames.length");
return this;
}
else if(colors == null){
System.out.println("Set colors by setColors first.");
return this;
}
else if(colorNames == null){
System.out.println("Set colorNames by setColorNames first.");
return this;
}
text.setText(" ");
if(index > -1){
text.setBackground(colors[index]);
text.setText(" ");
}
return text;
}
}
Was mich auch verwirrt ist, dass if(isSelected) block
jedes Mal durchgeführt wird I-Punkt Cursor auf bestimmte Zelle , aber meine Intuition würde eher erwarten, dass passiert, wenn cellHasFocus
Param wahr ist.
Vielen Dank im Voraus, wie ich mit ihm seit 2 Tagen habe Schwierigkeiten;/
EDIT 1
Added JComboBox Feld ColorComboBoxRenderer Klasse und initialisiert es in Konstruktor:
private JComboBox comboBox;
public ColorComboBoxRenderer(JComboBox combo) {
this.comboBox = combo;
//rest of code as it was
}
Changed das:
if(isSelected){
list.setSelectionBackground(colors[list.getSelectedIndex()]);
}
An:
if (isSelected){
list.setSelectionBackground(colors[list.getSelectedIndex()]);
comboBox.setBackground(colors[list.getSelectedIndex()]);
}
Ergebnisse in:
nun die Wirkung ist besser, vielleicht u eine Idee, wie JComboBox Hintergrund zu ändern, aber nicht Dropdown-Pfeil aus?