Ich versuche, eine ComboBox, die verschiedene Farben für verschiedene Elemente verwendet. Ich habe einen Testcode geschrieben, aber es scheint nicht zu funktionieren. Durch das Hinzufügen des Renderers wird das Programm zum Absturz gebracht, aber durch das Auskommentieren wird die Box im Frame angezeigt.Mehrere Farben für jedes Element in JComboBox
Gibt es irgendetwas, was ich vermisse oder mache ich das falsch? Ich habe versucht, das custom ComboBox Renderer Tutorial als ein Beispiel zu verwenden.
Hier ist mein Code:
TestComboColor.java
import java.awt.Color;
import javax.swing.JComboBox;
import javax.swing.JFrame;
public class TestComboColor {
static Color[] colors = {Color.BLUE, Color.GRAY, Color.RED};
static String[] strings = {"Test1", "Test2", "Test3"};
public static void main(String[] args)
{
JFrame frame = new JFrame("JAVA");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JComboBox cmb = new JComboBox();
ComboBoxRenderer renderer = new ComboBoxRenderer(cmb);
renderer.setColors(colors);
renderer.setStrings(strings);
cmb.setRenderer(renderer);
frame.add(cmb);
frame.pack();
frame.setVisible(true);
}
}
ComboBoxRenderer.java
import java.awt.Color;
import java.awt.Component;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListCellRenderer;
public final class ComboBoxRenderer extends JPanel implements ListCellRenderer
{
private static final long serialVersionUID = -1L;
private Color[] colors;
private String[] strings;
JPanel textPanel;
JLabel text;
public ComboBoxRenderer(JComboBox combo) {
textPanel = new JPanel();
textPanel.add(this);
text = new JLabel();
text.setOpaque(true);
text.setFont(combo.getFont());
textPanel.add(text);
}
public void setColors(Color[] col)
{
colors = col;
}
public void setStrings(String[] str)
{
strings = str;
}
public Color[] getColors()
{
return colors;
}
public String[] getStrings()
{
return strings;
}
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
if (isSelected)
{
setBackground(list.getSelectionBackground());
}
else
{
}
if (colors.length != strings.length)
{
System.out.println("colors.length does not equal strings.length");
return this;
}
else if (colors == null)
{
System.out.println("use setColors first.");
return this;
}
else if (strings == null)
{
System.out.println("use setStrings first.");
return this;
}
text.setText(strings[index]);
text.setForeground(colors[index]);
text.setBackground(getBackground());
return text;
}
}
Dank!
diese Anordnungen von Farben könnte für sichere Farben, strenge irgendwelchen Farben oder in kombinieren mit JColorChooser streng sein ??? – mKorbel
Das Array von Farben sollte in der Lage sein, eine beliebige Farbe einschließlich (neue Farbe (#, #, #)) einzugeben, obwohl ich gerade die sicheren Farben (Color.BLUE, etc.) zu Testzwecken verwendet habe. Außerdem verwende ich JColorChooser überhaupt nicht. –