Hallo Leute,
ich arbeite gerade an einem kleinen Projekt, in dem ich eine JComboBox zum wählen einer Zeichenfarbe verwende.
Dazu habe ich auf www.demo2s.com ein nettes Beispiel gefunden und dies für meine Zwecke leicht modifiziert.
Ich habe also eine Klasse "ColorRenderer" geschrieben, die folgendermaßen aussieht:
Diese verwende ich nun als ListCellRenderer für besagte ComboBox, was unter normalen Bedingungen auch funktioniert.
Nun möchte ich jedoch gerne das NimbusLookAndFeel (in com.sun.java.swing.plaf.nimbus) verwenden, da ich dieses wesentlich ansprechender finde als das Standard-LookAndFeel von Swing.
Das führt nur leider dazu, dass in der ComboBox die gewählt Farbe nicht richtig angezeigt wird. In der Liste sind die Farben zwar alle korrekt dargestellt, aber wenn ich dann eine auswähle, erscheint das Feld in der ComboBox immer nur grau. :bahnhof:
Gibt es eine Möglichkeit dies zu beheben?
Ich bin eigentlich noch Anfänger, fand die Frage aber etwas zu speziell für den Anfängerbereich.
Hier nochmal ein KSKB zur veranschaulichung:
Wenn man die drei Zeilen mit 'setLookAndFeel' usw wieder einbezieht geht's nicht mehr! :cry:
ich arbeite gerade an einem kleinen Projekt, in dem ich eine JComboBox zum wählen einer Zeichenfarbe verwende.
Dazu habe ich auf www.demo2s.com ein nettes Beispiel gefunden und dies für meine Zwecke leicht modifiziert.
Ich habe also eine Klasse "ColorRenderer" geschrieben, die folgendermaßen aussieht:
Code:
class ColorRenderer extends JPanel implements ListCellRenderer{
protected Color sc = Color.BLACK;
public ColorRenderer(){
super();
setBorder(new CompoundBorder(new MatteBorder(2, 4, 2, 4, Color.WHITE), new LineBorder(Color.BLACK)));
}
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus){
if(value instanceof Color)
sc = (Color)value;
return this;
}
@Override
public void paint(Graphics g){
setBackground(sc);
super.paint(g);
}
}
Nun möchte ich jedoch gerne das NimbusLookAndFeel (in com.sun.java.swing.plaf.nimbus) verwenden, da ich dieses wesentlich ansprechender finde als das Standard-LookAndFeel von Swing.
Das führt nur leider dazu, dass in der ComboBox die gewählt Farbe nicht richtig angezeigt wird. In der Liste sind die Farben zwar alle korrekt dargestellt, aber wenn ich dann eine auswähle, erscheint das Feld in der ComboBox immer nur grau. :bahnhof:
Gibt es eine Möglichkeit dies zu beheben?
Ich bin eigentlich noch Anfänger, fand die Frage aber etwas zu speziell für den Anfängerbereich.
Hier nochmal ein KSKB zur veranschaulichung:
Code:
/**
*
* @author SuperSeppel13
*/
import javax.swing.*;
import java.awt.*;
import javax.swing.border.*;
import com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel;
public class ColorComboBox extends JFrame{
JComboBox com;
public ColorComboBox(){
setSize(150, 80);
setLayout(new FlowLayout(FlowLayout.CENTER));
setDefaultCloseOperation(EXIT_ON_CLOSE);
com = new JComboBox();
com.setEditable(false);
com.setPreferredSize(new Dimension(100, 25));
com.addItem(Color.BLUE);
com.addItem(Color.BLACK);
com.addItem(Color.RED);
com.addItem(Color.GREEN);
com.setRenderer(new ColorRenderer());
add(com);
}
public static void main(String[] args){
// try{
// UIManager.setLookAndFeel(new NimbusLookAndFeel());
// }catch(Exception e){System.out.println(e);}
ColorComboBox ccb = new ColorComboBox();
ccb.setVisible(true);
}
}
class ColorRenderer extends JPanel implements ListCellRenderer{
protected Color sc = Color.BLACK;
public ColorRenderer(){
super();
setBorder(new CompoundBorder(new MatteBorder(2, 4, 2, 4, Color.WHITE), new LineBorder(Color.BLACK)));
}
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus){
if(value instanceof Color)
sc = (Color)value;
return this;
}
@Override
public void paint(Graphics g){
setBackground(sc);
super.paint(g);
}
}