# JComboBox - Farbe in der Auswalliste



## valbet (18. Okt 2008)

Hallo, ich habe folgende Source,  und wenn ich den Programm starte, die Farbe der "TEXT" ist Schwarz, obwohl im JCombo als erste Farbe "Rot" angegeben ist. Was kann ich ändern, damit die erste Farbe im "JComboBox" benutz wird. Danke



```
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JRadioButton;

import com.sun.org.apache.bcel.internal.generic.INSTANCEOF;

public class BuntOderNichtGUI extends JFrame{
	public BuntOderNichtGUI(String titel) {
		super(titel);
		gross = new JCheckBox("Grösser darstellen");
		auswahl=new JComboBox(farbAuswahl);
		auswahl.setEnabled(false);
		schaltflaecheBeenden=new JButton("Beenden");
		bunt =new JRadioButton("bunt");
		nichtBunt=new JRadioButton("nichtBunt");
		gruppe=new ButtonGroup();
		gruppe.add(bunt);
		gruppe.add(nichtBunt);
		anzeige =new JLabel("Text");
		anzeige.setFont(new Font("Arial",Font.BOLD,14));
		//
		setLayout(new GridLayout(0,2,10,10));
		add(anzeige);
		add(gross);
		add(bunt);
		add(auswahl);
		add(nichtBunt);
		add(schaltflaecheBeenden);
		//
		MeinListener listener=new MeinListener();
		schaltflaecheBeenden.addActionListener(listener);
		//auswahl.addActionListener(listener);//////////
		auswahl.addItemListener(listener);
		gross.addItemListener(listener);
		bunt.addItemListener(listener);
		nichtBunt.addItemListener(listener);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pack();
		setVisible(true);
	}

	//automatisch über Eclipse erzeugt
	private static final long serialVersionUID = 2007237315429965675L;

	//die verfügbaren Farben werden in einem Array ablegt
	private String[] farbAuswahl = {"Rot", "Gelb", "Blau", "Grün", "Schwarz"};

	private JRadioButton bunt, nichtBunt;
	private ButtonGroup gruppe;
	//für die Auswahl groß oder kleine
	private JCheckBox gross;
	//für die Auswahl der Farben
	private JComboBox auswahl;
	//für das Beenden
	private JButton schaltflaecheBeenden;
	//für die Anzeige
	private JLabel anzeige;
	
	class MeinListener implements ActionListener, ItemListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			Object ausloeser = e.getSource();
			if (ausloeser instanceof JButton) {
				if (e.getActionCommand().equals("Beenden")) {
					System.exit(0);
				}
			}// ende IF ausloeser instanceof JComboBox
		}//Ende  actionPerformed

		@Override
		public void itemStateChanged(ItemEvent e) {
			Object ausloeser = e.getSource();
			if (ausloeser instanceof JCheckBox) {
				if (gross.isSelected()==true) {
					anzeige.setFont(new Font("Arial",Font.PLAIN,30));
				}
				else  {
					anzeige.setFont(new Font("Arial",Font.ITALIC,14));
				}
			}//ende IF ausloeser instanceof JComboBox
			if (ausloeser instanceof JRadioButton) {
				if (bunt.isSelected()==true) {
					auswahl.setEnabled(true);
				}
				else  {
					auswahl.setEnabled(false);
				}
			}//ende IF ausloeser instanceof JComboBox
			
			///////////////////////////
			if (ausloeser instanceof JComboBox) {
				if (auswahl.getSelectedItem().toString().equals("Rot")) {
					anzeige.setForeground(Color.RED);
				}
				if (auswahl.getSelectedItem().toString().equals("Gelb")) {
					anzeige.setForeground(Color.YELLOW);
				}
				if (auswahl.getSelectedItem().toString().equals("Blau")) {
					anzeige.setForeground(Color.BLUE);
				}
				if (auswahl.getSelectedItem().toString().equals("Grün")) {
					anzeige.setForeground(Color.GREEN);
				}
				if (auswahl.getSelectedItem().toString().equals("Schwarz")) {
					anzeige.setForeground(Color.BLACK);
				}
			}// ende IF ausloeser instanceof JComboBox
			if (ausloeser instanceof JButton) {
				if (auswahl.getActionCommand().toString().equals("Beenden")) {
					System.exit(0);
				}
			}// ende IF ausloeser instanceof JComboBox
			//////////////////////////
			
		}// ende itemStateChanged
		
	}

}// ende BuntOderNichtGUI
```


----------



## Marco13 (18. Okt 2008)

Ändert sich die Frabe, wenn man die Auwahl ändert? Ggf. einmal am Anfang "per Hand" das bei setForeground setzen, was am Anfang in de ComboBox ausgewählt sein wird.


----------



## Valbet (19. Okt 2008)

Es geht darum das die erste Farbe automatisch erkannt werden kann. Keine manuelle Farbeeingabe!


----------



## Parg (23. Mrz 2011)

Hi,

ich möchte dieses Thema gerne noch einmal aufgreifen, da ich vor dem selben Problem stehe und so wie ich das sehe keine Lösung gefunden wurde.

Ausgangslage ist der Code aus dem Anfangspost.

Der Code hat den Schönheitsfehler, dass nicht gleich die Farbe ROT aus dem Kombinationsfeld "aktiviert" wird.
Ich soll die Klasse so ändern, dass die Anzeige im Kombifeld die aktuelle Farbe direkt nach dem Start des Programms anzeigt.

Also Tipp steht da, dass man keine neue Anweisung dazu braucht. Es würde eine kleine Korrektur im Quelltext ausreichen.
"Sehen Sie sich die Einträge in der Liste des Kombifelds genau an und überprüfen Sie, welche Farbe der Text zunächst hat"

Hier noch mal der Code im JAVA-Tag


```
package de.fernschulen.j10_p04;

import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JRadioButton;

public class BuntOderNichtGUI extends JFrame{
	//automatisch über Eclipse erzeugt
	private static final long serialVersionUID = 2007237315429965675L;

	//die verfügbaren Farben werden in einem Array ablegt
	private String[] farbAuswahl = {"Rot", "Gelb", "Blau", "Grün", "Schwarz"};
	

	//die Komponenten
	//für die Auswahl farbig oder nicht über RadioButtons
	private JRadioButton bunt, nichtBunt;
	private ButtonGroup gruppe;
	//für die Auswahl groß oder kleine
	private JCheckBox gross;
	//für die Auswahl der Farben
	private JComboBox auswahl;
	//für das Beenden
	private JButton schaltflaecheBeenden;
	//für die Anzeige
	private JLabel anzeige;
	
	//die innere Klasse für die Listener
	//Sie implementiert jetzt auch den ItemListener
	class MeinListener implements ActionListener, ItemListener {

		//die Methode des ActionListeners
		//für die Farbauswahl und die Schaltfläche
		@Override
		public void actionPerformed(ActionEvent e) {
			//zum einfacheren Zugriff die Quelle in einem Object ablegen
			Object ausloeser = e.getSource();
			//Wer hat das Ereignis ausgelöst?
			//die ComboBox?
			if (ausloeser instanceof JComboBox) {
				//was ist auswgewählt?
				if (auswahl.getSelectedItem().toString().equals("Rot"))
					anzeige.setForeground(Color.RED);
				if (auswahl.getSelectedItem().toString().equals("Gelb"))
					anzeige.setForeground(Color.YELLOW);
				if (auswahl.getSelectedItem().toString().equals("Blau"))
					anzeige.setForeground(Color.BLUE);
				if (auswahl.getSelectedItem().toString().equals("Grün"))
					anzeige.setForeground(Color.GREEN);
				if (auswahl.getSelectedItem().toString().equals("Schwarz"))
					anzeige.setForeground(Color.BLACK);
			}
			//die Schaltfläche
			if (ausloeser instanceof JButton) {
				//eigentlich ist die Abfrage nicht nötig
				//das macht uns das Leben aber leichter, wenn neue Schaltflächen dazu kommen
				if (e.getActionCommand().equals("Beenden"))
					System.exit(0);
			}
		}

		//für die CheckBox und die RadioButtons 
		@Override
		public void itemStateChanged(ItemEvent e) {
			//zum einfacheren Zugriff die Quelle in einem Object ablegen
			Object ausloeser = e.getSource();
			//Wer hat das Ereignis ausgelöst?
			//die Checkbox?
			if (ausloeser instanceof JCheckBox) {
				//ist die CheckBox markiert?
				if (gross.isSelected() == true)
					anzeige.setFont(new Font("Arial", Font.PLAIN,30));
				else
					anzeige.setFont(new Font("Arial", Font.PLAIN,14));
			}
			//oder waren es die RadioButtons
			if (ausloeser instanceof JRadioButton) {				
				//ist bunt markiert?
				if (bunt.isSelected() == true)
					auswahl.setEnabled(true);
				else
					auswahl.setEnabled(false);
			}
		}
	}
	
	//der Konstruktor
	public BuntOderNichtGUI(String titel) {
		super(titel);
		
		gross = new JCheckBox("Größer darstellen");
		
		//die Liste erzeugen
		//die Daten kommen aus dem Array farbAuswahl
		auswahl = new JComboBox(farbAuswahl);
		//erst einmal nicht aktivieren
		auswahl.setEnabled(false);
		
		//die Schaltfläche
		schaltflaecheBeenden = new JButton("Beenden");
		
		//die RadioButtons und die Gruppe
		bunt = new JRadioButton("bunt");
		nichtBunt = new JRadioButton("einfarbig");
		nichtBunt.setSelected(true);
		
		gruppe = new ButtonGroup();
		gruppe.add(bunt);
		gruppe.add(nichtBunt);
		
		//das Label
		anzeige = new JLabel("Der Text");
		//die Schriftart etc. setzen
		anzeige.setFont(new Font("Arial", Font.PLAIN,14));
		
		//ein Gridlayout mit 2 Spalten und etwas Abstand
		setLayout(new GridLayout(0,2,10,10));

		//die Komponenten hinzufügen
		//erst das Label
		add(anzeige);
		//daneben kommt die Checkbox
		add(gross);
		//der erste RadioButton
		add(bunt);
		//daneben die ComboBox
		add(auswahl);
		//der zweite RadioButton
		add(nichtBunt);
		//und links unten die Schaltfläche
		add(schaltflaecheBeenden);
		
		//die Listener verbinden
		MeinListener listener = new MeinListener();
		schaltflaecheBeenden.addActionListener(listener);
		gross.addItemListener(listener);
		
		//für die RadioButtons muss das für jeden Button passieren, nicht für die Gruppe!
		bunt.addItemListener(listener);
		nichtBunt.addItemListener(listener);
		
		auswahl.addActionListener(listener);

		//die Standard-Aktion setzen
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		//das Fenster "packen" und anzeigen
		pack();
		setVisible(true);
	}
}
```


----------



## Marco13 (23. Mrz 2011)

Meinst du sowas wie

```
if (bunt.isSelected() == true)
                {
                    auswahl.setEnabled(true);
                    [b]auswahl.setSelectedIndex(0);[/b]
                }
```
!?


----------



## Parg (23. Mrz 2011)

Perfekt, genau das ist es.
Oh man ich muss wirklich noch viel lernen  Vielen Dank


----------



## Marco13 (23. Mrz 2011)

Eigentlich ist das nicht "schön", weil man ein bißchen den "Seitenffekt" ausnutzt, dass da halt actionPerformed aufgerufen wird. Eigentlich sollte man Listener nicht so "vermischen" wie es da gemacht wurde, und in den Methoden wie "actionPerformed" im Idealfall nur einzelne, private Methoden aufrufen, aber ... ist wohl nicht so wichtig...


----------



## Parg (23. Mrz 2011)

Ich habe so manchmal den Eindruck, dass man das ganze nicht auf dem einfachsten Wege beigebracht kriegt. So nach dem Motto "Erst kompliziert lernen um dann einfach anzuwenden"


----------

