JPanel in JComboBox einfügen

vNeumann

Mitglied
Hallo liebe Java-Experten!
Ich stehe gerade, wie alle Fragenden hier, vor einem Problem. Und zwar möchte ich auf einem JFrame in einer JComboBox eine Farbe auswählen können. Ich hab mir das so vorgestellt, dass nicht in der ComboBox steht: rot, grün, blau, ... - sondern dass man die Farben als Farbbalken sieht und auswählen kann.

Mein Lösungsansatz war folgender:
Einfach zunächst mal eine JComboBox anlegen. Dann einen JPanel[] erstellen, in dem lauter einzelne JPanels mit der dazugehörigen Background-Farbe sind, und diesen dann als neues ComboBoxModel anfügen.

Geht das grundsätzlich überhaupt? Oder kann die JComboBox wirklich nur mit String[] umgehen? (irgendwie finde ich über Google nur solche Beispiele).

Danke!

PS: Mein Code hier (pps: JForm wurde mit Netbeans GUI-Builder erstellt, daher der teils ungeordnete Code.)

Code:
import java.awt.Color;
import java.util.Vector;
import javax.swing.JPanel;


/**
 *
 * @author Thomas
 */
public class SettingEntryTypes extends javax.swing.JFrame {
    private Vector<Color> _colors = null;
    private Session session;

    /** Creates new form SettingEntryTypes */
    public SettingEntryTypes(Session session) {
        initComponents();
    }

    public void init() {
        jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(
                colorPanels()));
    }

    private Vector<Color> colors() {
        if(_colors==null) {
            _colors = new Vector<Color>();
            _colors.add(Color.red);
            _colors.add(Color.blue);
            _colors.add(Color.green);
            _colors.add(Color.orange);
        }
        return _colors;
    }

    private JPanel[] colorPanels() {
        JPanel[] panels = new JPanel[colors().size()];
        for(int i = 0; i < colors().size(); i++) {
            JPanel panel = new JPanel();
            panel.setBackground(colors().get(i));       
        }

        return panels;
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jComboBox1 = new javax.swing.JComboBox();

        getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        getContentPane().add(jComboBox1, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 90, 140, -1));

        pack();
    }// </editor-fold>


    // Variables declaration - do not modify
    private javax.swing.JComboBox jComboBox1;
    // End of variables declaration

}
 
Moin,

die einfachste Variante ist wohl, das Ganze mit Hilfe von einem eigenen Renderer zu realisieren.
Schau Dir mal auf der Seite den unteren Teil an:
http://java.sun.com/docs/books/tutorial/uiswing/components/combobox.html

Ich würde vorschlagen, dass Du anstatt von den dort verarbeitenden Images
einfach ein JLabel nimmst und dieses entsprechend mit einer Hintergrundfarbe belegst.
Sicher kannst Du auch JPanels nehmen, aber das bleibt natürlich Dir überlassen.

Gruß,
Xan
 
Zurück