# JComboBox füllen



## Sophie (4. Jun 2011)

Hallo miteinander

Ich schaffe es hier nicht meine JComboBox mit den Werten (cocktailnamen) zu füllen. Könnt Ihr mir hier weiterhelfen?

Ich vermute es liegt an der Methode getName() das scheint nicht zu funktionieren.

Vielen Dank Sophie


```
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JComboBox;
import javax.swing.JTextField;


public class CocktailsAusgebenListener implements ItemListener  {
   
	
    private MeinCocktailMixerGUI mixer;
	private JTextField nameText;
	
    /**
     * Konstruktor.
     * @param meinCocktailMixerGUI 
     */
    public CocktailsAusgebenListener(MeinCocktailMixerGUI mixer) {
    this.mixer = mixer;
  }

	@Override
	public void itemStateChanged(ItemEvent e) {
		JComboBox selectedChoice = (JComboBox)e.getSource();
        if ( selectedChoice.getSelectedItem().equals("Ende") )
          System.exit( 0 );
	}
	
	public JTextField getName(JTextField name) {
		this.nameText = name;
		return name;
		
	} 
}
```


```
import java.awt.Dimension;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.TitledBorder;

public class CocktailsAusgebenPanel extends JPanel{
	
	//Listener für Events
	private CocktailsAusgebenListener listener1;
	
	
//	String[] lang = { getName() } ;


	/**
	 * Konstruktor. Erzeugt eine grafische Komponente
	 * @param listener1 
	 */
	public CocktailsAusgebenPanel(CocktailsAusgebenListener listener1) {
		
		this.listener1 = listener1;

		// Das Layout wird mit Hilfe eines Boxlayouts realisiert
		// BoxLayout.Y_Axis bewirkt eine vertikale Anordnung der
		// Komponenten

		this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
		this.add(Box.createVerticalGlue());

		// Das Label sollte nicht die ganze Breite füllen.
		// Dafür wird eine horizonalte Box erzeugt
		// In die Box kommt flexibler leerer Raum und dann das Label
		// Danach wird die Box in dem Panel hinzugefügt

		Box nameLabelBox = Box.createHorizontalBox();
		nameLabelBox.add(Box.createHorizontalGlue());
		JLabel nameLabel = new JLabel("Cocktail");
		// nameLabel links anordnen
		nameLabel.setAlignmentX(SwingConstants.LEFT);
		groesseEinsetzen(nameLabel, 585, 20);
		nameLabelBox.add(nameLabel);
		this.add(nameLabelBox);

		// Die ComboBox soll nicht die ganze Breite füllen.
		// Dafuer wird eine horizontale Box erzeugt.
		// In die Box kommt leerer Raum, dann die ComboBox
		// und noch ein leerer Raum
		// Dann wird die Box in das Panel eingefügt.
		Box nameTextFieldBox = Box.createHorizontalBox();
		nameTextFieldBox.add(Box.createHorizontalGlue());
		JComboBox jbox = new JComboBox();
		nameTextFieldBox.add(jbox);
		groesseEinsetzen(jbox, 490, 20);
		jbox.setAlignmentX(SwingConstants.LEFT);
		nameTextFieldBox.add(new JCheckBox("alkoholfrei"));
		nameTextFieldBox.add(Box.createHorizontalGlue());
		this.add(nameTextFieldBox);
		
		JTextField JTextField = null;
		listener1.getName(JTextField);


		// Fester Abstand oberhalb des Listen-Panels
		this.add(Box.createRigidArea(new Dimension(0, 10)));

		// Box erzeugen, welche das Listen-Panel enthält
		Box zutatenPanelBox = Box.createHorizontalBox();
		// Vor und nach dem Panel wird flexibler Abstand (Glue) eingefügt
		zutatenPanelBox.add(Box.createHorizontalGlue());
		JPanel pZutat = erzeugeListenPanel();
		zutatenPanelBox.add(pZutat);
		zutatenPanelBox.add(Box.createHorizontalGlue());
		this.add(zutatenPanelBox);
		
	
		// Fester Abstand unterhalb des Zutaten-Panels
		this.add(Box.createRigidArea(new Dimension(0, 10)));

		// Label für Zubereitung
		Box zubereitungLabelBox = Box.createHorizontalBox();
		zubereitungLabelBox.add(Box.createHorizontalGlue());
		JLabel zubereitungLabel = new JLabel("Zubereitung");
		// zubereitungLabel links anordnen
		zubereitungLabel.setAlignmentX(SwingConstants.LEFT);
		groesseEinsetzen(zubereitungLabel, 585, 20);
		zubereitungLabelBox.add(zubereitungLabel);
		this.add(zubereitungLabelBox);

		// zubereitungTextAreaBox wird wie nameTextFieldBox behandelt
		Box zubereitungTextAreaBox = Box.createHorizontalBox();
		zubereitungTextAreaBox.add(Box.createHorizontalGlue());
		JTextArea zubereitungTextArea = new JTextArea();
		JScrollPane scrollZubereitung = new JScrollPane(zubereitungTextArea);
		groesseEinsetzen(scrollZubereitung, 580, 50);
		scrollZubereitung.setAlignmentX(SwingConstants.LEFT);
		zubereitungTextAreaBox.add(scrollZubereitung);
		zubereitungTextAreaBox.add(Box.createHorizontalGlue());
		this.add(zubereitungTextAreaBox);

		// Abstand unterer Rand
		this.add(Box.createVerticalGlue());
		
		
		jbox.addItem(getName());
		
/*		 for ( String s : lang )
			 jbox.addItem( s );
   		     jbox.addItemListener( new ItemListener() {
		      public void itemStateChanged( ItemEvent e ) {
		        JComboBox selectedChoice = (JComboBox)e.getSource();
		        if ( selectedChoice.getSelectedItem().equals("Ende") )
		          System.exit( 0 );
		      }
		    } );*/
	}
	

	/**
	 * Methode für das Panel Zutaten
	 * 
	 * @return listenPanel
	 */
	public JPanel erzeugeListenPanel() {

		JPanel listenPanel = new JPanel();

		// Panel mit einem Rahmen mit Titel versehen
		listenPanel.setBorder(new TitledBorder("Zutaten"));

		listenPanel.setLayout(new BoxLayout(listenPanel, BoxLayout.Y_AXIS));
		groesseEinsetzen(listenPanel, 580, 150);

		// Box als Container fuer das listeLabel
		// erleichtert die Anordnung im BoxLayout
		Box listeLabelBox = Box.createHorizontalBox();
		JLabel listeLabel = new JLabel("Zutatenliste");
		listeLabel.setAlignmentX(SwingConstants.LEFT);
		groesseEinsetzen(listeLabel, 560, 50);
		listeLabelBox.add(listeLabel);
		listenPanel.add(listeLabelBox);

		JList zutatenEingabe = new JList();
		JScrollPane scrollZutaten = new JScrollPane(zutatenEingabe);
		groesseEinsetzen(scrollZutaten, 560, 50);
		listenPanel.add(scrollZutaten);
		listenPanel.add(Box.createRigidArea(new Dimension(0, 10)));

		return listenPanel;
	}
	


	// Hilfsmethode zum exakten Setzen der Groesse einer Komponente
	private static void groesseEinsetzen(JComponent c, int width, int height) {
		Dimension d = new Dimension(width, height);
		c.setPreferredSize(d);
		c.setMaximumSize(d);
		c.setMinimumSize(d);
	}
}
```


```
import java.awt.CardLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;

public class MeinCocktailMixerGUI extends JFrame{
	
	/**
	 * Main-Methode
	 * 
	 * @param args
	 *            Übergabeparameter
	 */
	public static void main(String[] args) {

		MeinCocktailMixerGUI cmixer = new MeinCocktailMixerGUI();
		cmixer.initGUI();
	}
	
	private JPanel backP;//in diesem leeren Panel werden die anderen Panels sichtbar gemacht
	private JPanel startPanel;//Begrüßungspanel
	private JPanel neuPanel;//neuen Cocktail-Anlegungspanel
	private JPanel ausgebenPanel;//alle Cocktails ausgeben Panel
	private JFrame fenster;//Variable wird für die Funktion "sichern" benötigt, da die Methode "chooser.showSaveDialog(fenster)" in der Klammer eine JFrame-Variable braucht
	
	
	public static final String START = "StartPanel";//Variable zur Übergabe an das CardLayout, "static" für das CardLayout in "NeuCocktailListener"
	public static final String NEU = "NeuPanel";//Variable zur Übergabe an das CardLayout, "static" für das CardLayout in "NeuCocktailListener"
	public static final String AUSGABE = "AusgabePanel";//Variable zur Übergabe an das CardLayout, "static" für das CardLayout in "CocktailsAusgebenListener"
	
	//Variable, um in jeder Klasse ein CocktailBar-Objekt übergeben zu können
	private CocktailBar cb;
	
	//erzeugt eine leere CocktailBar
	public MeinCocktailMixerGUI(){
		this.cb = new CocktailBar();
	}
	
	//Methode holt sich das CocktailBar-Objekt
	public CocktailBar getCocktailBar() {
		return cb;
	}
	
	//Methode holt sich das BackPanel 
	public JPanel getBackPanel(){
		return backP;
	}
	
	//Erzeugt CardLayout und verwaltet die Sichtbarkeit der Panels
	public void initGUI() {
		JFrame cmixerFenster = new JFrame();
		cmixerFenster.setSize(new Dimension(600, 400));
		
		// Fenstertitel setzen
		cmixerFenster.setTitle("Mein Cocktailmixer");
		
		// Fensterposition auf die Mitte des Bildschirm festlegen
		cmixerFenster.setLocationRelativeTo(null);
		cmixerFenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		// MenueLeiste erzeugen und in Fenster einfuegen
		JMenuBar cMenuBar = erzeugeMenuBar();
		cmixerFenster.setJMenuBar(cMenuBar);
		
		//BackPanel hinzufügen
		backP = new JPanel(new CardLayout());
		cmixerFenster.getContentPane().add(backP);
		
		// BegruessungsPanel 
		startPanel = erzeugeBegruessungsPanel();
		
		
		//erzeugt Listener und übergibt ihn an das CocktailNeuPanel
		CocktailNeuListener listener = new CocktailNeuListener(this);
		neuPanel = new CocktailNeuPanel(listener);
		
		//erzeugt Listener und übergibt ihn an das CocktailAusgebenPanel
		CocktailsAusgebenListener listener1 = new CocktailsAusgebenListener(this);
		ausgebenPanel = new CocktailsAusgebenPanel(listener1);
	
	
		//verwaltet die Sichtbarkeit der Panels (CardLayout)
		backP.add(startPanel, START);
		backP.add(neuPanel, NEU);
		backP.add(ausgebenPanel, AUSGABE);
		
		// Fenster sichtbar machen
		cmixerFenster.setVisible(true);

	}
	/**
	 * Methode zum Erzeugen eines BegrüssungsPanels mit Text und Bild
	 * 
	 * @return JPanel BegruessungsPanel
	 */
	
	private static JPanel erzeugeBegruessungsPanel() {
		// Neuen JPanel Container erzeugen
		JPanel startPanel = new JPanel();
		// Begrüssungstext erzeugen und in Container einfügen
		JLabel begText = new JLabel("Willkommen beim Cocktailmixer");
		startPanel.add(begText);
		// Bildkomponente aus uebergebene Grafik erzeugen und in Container
		// einfügen
		JLabel begBild = new JLabel(new ImageIcon("AbbCocktail.gif"));
		startPanel.add(begBild);

		// Layoutmanager für vertikales Layout setzen
		BoxLayout vLayout = new BoxLayout(startPanel, BoxLayout.Y_AXIS);
		startPanel.setLayout(vLayout);
		// Komponenten zentriert im Container ausrichten
		begText.setAlignmentX(Component.CENTER_ALIGNMENT);
		begBild.setAlignmentX(Component.CENTER_ALIGNMENT);

		// Container zurückgeben
		return startPanel;
	}
	
	/**
	 * Methode zum Erzeugen MenueLeiste mit Menuepunkten.
	 * 
	 * @return JPanel MenueLeiste
	 */
	
	private JMenuBar erzeugeMenuBar() {
		// Menueleiste erzeugen
		JMenuBar menueLeiste = new JMenuBar();

		// Menuepunkt CocktailMixer
		JMenu mixer_menu = new JMenu("Cocktailmixer");
		JMenu mixer = new JMenu("Cocktails");
		
		// Menueeintraege
		JMenuItem neuItem = new JMenuItem("Neu");
		JMenuItem ladenItem = new JMenuItem("Laden ...");
		JMenuItem speichernItem = new JMenuItem("Speichern ...");
		JMenuItem beendenItem = new JMenuItem("Beenden");
		
		JMenuItem cockEingeben = new JMenuItem("Neuen Cocktail eingeben");
		JMenuItem alleCockAusgeben = new JMenuItem("Alle Cocktails ausgeben");
		JMenuItem sucheCock = new JMenuItem("Suche nach Cocktails");
		
		//Actionlistener für das JItemMenu "Neuen Cocktail eingeben"
		cockEingeben.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				CardLayout cl = (CardLayout) backP.getLayout();
				cl.show(backP, NEU);
				
			}
		 });
		
		//Actionlistener für das JItemMenu "Speichern"
		speichernItem.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				JFileChooser chooser = new JFileChooser();
				int returnVal = chooser.showSaveDialog(fenster);
				if(returnVal == JFileChooser.APPROVE_OPTION){
					String file = chooser.getSelectedFile().getAbsolutePath();//getAbsolutePath() wird benötigt, da sonst im Workspace Verzeichnis gespeichert wird
					file += chooser.getSelectedFile().getName();
					cb.sichern(file);
				}
			}
		});
		
		alleCockAusgeben.addActionListener(new ActionListener(){
			
			@Override
			public void actionPerformed (ActionEvent e){
				CardLayout cl = (CardLayout) backP.getLayout();
				cl.show(backP, AUSGABE);
			}
		 });

		// Menueeintraege einfuegen
		mixer_menu.add(neuItem);
		mixer_menu.add(ladenItem);
		mixer_menu.add(speichernItem);
		mixer_menu.add(beendenItem);
		
		mixer.add(cockEingeben);
		mixer.add(alleCockAusgeben);
		mixer.add(sucheCock);

		// Menuepunkte in Menueleiste einfuegen
		menueLeiste.add(mixer_menu);
		menueLeiste.add(mixer);
		
		
		// MenueLeiste zurueckgeben
		return menueLeiste;
	}
}
```

Gespeichert werden die Cocktails hier:


```
import java.awt.CardLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JList;
import javax.swing.JTextArea;
import javax.swing.JTextField;


public class CocktailNeuListener implements ActionListener {

	private JTextField cocktailName;
	private JTextField menge;
	private JTextField zutat;
	private JTextArea zubereitung;
	private JList zutatenListe;
	private JCheckBox alkoholfrei;
	private JButton hinzufuegen;
	private JButton speichern;
	private JButton abbrechen;
	private MeinCocktailMixerGUI mixer;
	private Cocktail cocktail;
	
	
	//Konstruktor
	public CocktailNeuListener(MeinCocktailMixerGUI mixer){
		this.mixer = mixer;
		this.cocktail =  new Cocktail(null);
	}
	
	//Methode für Action Events
	@Override
	public void actionPerformed(ActionEvent e) {
		
		if( e.getSource() == hinzufuegen){
			hinzufuegen();
		}
		if( e.getSource() == speichern){
			speichern();
		}
		if( e.getSource() == abbrechen){
			abbrechen();
		}
	}
	
	//Methode Hinzufügen
	private void hinzufuegen(){
		//Zutat speichern
		Zutat neueZutat = new Zutat (zutat.getText(), menge.getText());
		cocktail.setZutat(neueZutat);
		
		//In die Liste schreiben
		DefaultListModel model = (DefaultListModel) zutatenListe.getModel();
		model.addElement(neueZutat);
		
		zutat.setText("");
		menge.setText("");
	}
	
	//Alle Textfelder leeren
	private void resetText(){
		cocktailName.setText("");
		zutat.setText("");
		menge.setText("");
		zubereitung.setText("");
	}
	//Wird abbrechen gewählt wird der gesamte Text zurückgesetzt und das Startpanel angezeigt
	private void abbrechen(){
		cocktail = new Cocktail();
		zutatenListe.setModel(new DefaultListModel());
		resetText();
		
		/*CardLayout cl = (CardLayout) mixer.getBackPanel().getLayout();
		cl.show(mixer.getBackPanel(), mixer.START);*/
	}
	
	//speichert die angegebenen Daten in CocktailBar
	private void speichern(){
		cocktail.setName(cocktailName.getText());
		cocktail.setZubereitung(zubereitung.getText());
		mixer.getCocktailBar().addCocktail(cocktail);
		cocktail = new Cocktail(null);
		zutatenListe.setModel(new DefaultListModel());
		resetText();
	}
	
	//Buttons mit ActionListener versehen
	public void setHinzufuegen(JButton hinzufuegen) {
		this.hinzufuegen = hinzufuegen;
		hinzufuegen.addActionListener(this);
	}
	public void setSpeichern(JButton speichern){
		this.speichern = speichern;
		speichern.addActionListener(this);
	}
	
	public void setAbbrechen(JButton abbrechen) {
		this.abbrechen = abbrechen;
		abbrechen.addActionListener(this);
	}

	
	//Methode um die Eingaben zu speichern
	public void setName(JTextField name){
		
		this.cocktailName = name;
	}

	public void setAlkoholfrei(JCheckBox alkoholfrei) {
		this.alkoholfrei = alkoholfrei;
		
	}

	public void setZubereitung(JTextArea zubereitung) {
		this.zubereitung = zubereitung;
		
	}

	public void setMenge(JTextField menge) {
		this.menge = menge;
		
	}

	public void setZutat(JTextField zutat) {
		this.zutat = zutat;
		
	}

	public void setZutaten(JList zutaten) {
		this.zutatenListe = zutaten;
		
	}
	
	
}
```


```
import java.awt.Dimension;
import java.awt.event.FocusEvent;
import java.awt.event.KeyEvent;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.TitledBorder;

public class CocktailNeuPanel extends JPanel {
	
	//Listener für die Buttons und andere Events
	private CocktailNeuListener listener;

	/**
	 * Konstruktor. Erzeugt eine grafische Komponente
	 * Übergibt den Listener
	 */
	public CocktailNeuPanel(CocktailNeuListener listener) {
		this.listener = listener;
		
		// Das Layout wird mit Hilfe eines Boxlayout realisiert
		// BoxLayout.Y_AXIS bewirkt eine vertikale Anordnung der
		// Komponenten (auf der Y-Achse)
		this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));

		this.add(Box.createVerticalGlue());

		// Das Label sollte nicht die ganze Breite fuellen.
		// Dafuer wird eine horizontale Box erzeugt.
		// In die Box kommt flexibler leerer Raum und dann das Label
		// Danach wird die Box in dem Panel hinzugefuegt.
		Box nameLabelBox = Box.createHorizontalBox();
		nameLabelBox.add(Box.createHorizontalGlue());
		JLabel nameLabel = new JLabel("Cocktailname");
		// nameLabel links anordnen
		nameLabel.setAlignmentX(SwingConstants.LEFT);
		groesseEinsetzen(nameLabel, 585, 20);
		nameLabelBox.add(nameLabel);
		this.add(nameLabelBox);

		// Das Textfeld sollte nicht die ganze Breite fuellen.
		// Dafuer wird eine horizontale Box erzeugt.
		// In die Box kommt leerer Raum, dann das Textfeld und noch
		// ein leerer Raum
		// Dann wird die Box in das Panel eingefuegt.
		// createRigidArea und glue (siehe Box b0) unterscheiden
		// sich beim Vergroessern und Verkleinern des Fensters.
		Box nameTextFieldBox = Box.createHorizontalBox();
		nameTextFieldBox.add(Box.createHorizontalGlue());
		JTextField nameTextField = new JTextField();
		groesseEinsetzen(nameTextField, 490, 20);
		nameTextField.setAlignmentX(SwingConstants.LEFT);
		nameTextFieldBox.add(nameTextField);
		
		listener.setName(nameTextField);
				
		JCheckBox alkoholfrei = new JCheckBox("alkoholfrei");
		nameTextFieldBox.add(alkoholfrei);
		listener.setAlkoholfrei(alkoholfrei);
		
		nameTextFieldBox.add(Box.createHorizontalGlue());
		this.add(nameTextFieldBox);

		// Fester Abstand oberhalb des Zutaten-Panels
		this.add(Box.createRigidArea(new Dimension(0, 10)));

		// Box erzeugen, welche das Zutaten-Panel enthält
		Box zutatenPanelBox = Box.createHorizontalBox();
		// Vor und nach dem Panel wird flexibler Abstand (Glue) eingefügt
		zutatenPanelBox.add(Box.createHorizontalGlue());
		JPanel pZutat = erzeugeZutatenPanel();
		zutatenPanelBox.add(pZutat);
		zutatenPanelBox.add(Box.createHorizontalGlue());
		this.add(zutatenPanelBox);

		// Fester Abstand unterhalb des Zutaten-Panels
		this.add(Box.createRigidArea(new Dimension(0, 10)));

		// Label fuer "Zubereitung" wie bei "Cocktailname"
		Box zubereitungLabelBox = Box.createHorizontalBox();
		zubereitungLabelBox.add(Box.createHorizontalGlue());
		JLabel zubereitungLabel = new JLabel("Zubereitung");
		// zubereitungLabel links anordnen
		zubereitungLabel.setAlignmentX(SwingConstants.LEFT);
		groesseEinsetzen(zubereitungLabel, 585, 20);
		zubereitungLabelBox.add(zubereitungLabel);
		this.add(zubereitungLabelBox);

		// zubereitungTextAreaBox wird wie nameTextFieldBox behandelt
		Box zubereitungTextAreaBox = Box.createHorizontalBox();
		zubereitungTextAreaBox.add(Box.createHorizontalGlue());
		JTextArea zubereitungTextArea = new JTextArea();
		JScrollPane scrollZubereitung = new JScrollPane(zubereitungTextArea);
		groesseEinsetzen(scrollZubereitung, 580, 50);
		scrollZubereitung.setAlignmentX(SwingConstants.LEFT);
		zubereitungTextAreaBox.add(scrollZubereitung);
		zubereitungTextAreaBox.add(Box.createHorizontalGlue());
		this.add(zubereitungTextAreaBox);
		
		listener.setZubereitung(zubereitungTextArea); //Listener Zubereitung

		// Fester Platz fuer die Schaltflaechen
		this.add(Box.createRigidArea(new Dimension(0, 10)));

		// Box fuer die Schaltflaechen
		Box buttonBox = Box.createHorizontalBox();
		JButton speicherButton = new JButton("Speichern");
		//Listener für Speichern-Button
		listener.setSpeichern(speicherButton);
		
		JButton abbruchButton = new JButton("Abbrechen");
		//Listener für Abbrechen-Button
		listener.setAbbrechen(abbruchButton);
		
		// HorizontalGlue links und rechts damit die Schaltflaechen zentriert
		// werden
		buttonBox.add(Box.createHorizontalGlue());
		buttonBox.add(speicherButton);
		// Fester Platz zwischen den Schaltflaechen
		buttonBox.add(Box.createRigidArea(new Dimension(10, 0)));
		buttonBox.add(abbruchButton);
		buttonBox.add(Box.createHorizontalGlue());
		this.add(buttonBox);

		this.add(Box.createVerticalGlue());
	}

	// Methode fuer das Panel Zutaten
	public JPanel erzeugeZutatenPanel() {

		JPanel zutatenPanel = new JPanel();

		// Panel mit einem Rahmen mit Titel versehen
		zutatenPanel.setBorder(new TitledBorder("Zutaten"));

		zutatenPanel.setLayout(new BoxLayout(zutatenPanel, BoxLayout.Y_AXIS));
		groesseEinsetzen(zutatenPanel, 580, 150);
		// Box fuer die 2 Label
		Box labelBox = Box.createHorizontalBox();
		JLabel mengeLabel = new JLabel("Menge");
		JLabel zutatLabel = new JLabel("Zutat");
		groesseEinsetzen(mengeLabel, 120, 20);
		groesseEinsetzen(zutatLabel, 440, 20);
		labelBox.add(mengeLabel);
		labelBox.add(zutatLabel);
		mengeLabel.setAlignmentX(SwingConstants.LEFT);
		zutatLabel.setAlignmentX(SwingConstants.LEFT);
		zutatenPanel.add(labelBox);

		// Box fuer die Textfelder und JButton
		Box inputBox = Box.createHorizontalBox();
		groesseEinsetzen(inputBox, 560, 28);
		JTextField mengeT = new JTextField();
		groesseEinsetzen(mengeT, 110, 20);
		JTextField zutatT = new JTextField();
		groesseEinsetzen(zutatT, 310, 20);
		JButton hinzuButton = new JButton("Hinzufügen");
		inputBox.add(mengeT);
		inputBox.add(Box.createRigidArea(new Dimension(10, 00)));
		inputBox.add(zutatT);
		inputBox.add(Box.createHorizontalGlue());
		inputBox.add(hinzuButton);
		zutatenPanel.add(inputBox);
		
		listener.setMenge(mengeT);//Listener für die Mengenangabe
		listener.setZutat(zutatT);//Listener für die Zutatenangabe
		listener.setHinzufuegen(hinzuButton);
		
		// Box als Container fuer das listeLabel
		// erleichtert die Anordnung im BoxLayout
		Box listeLabelBox = Box.createHorizontalBox();
		JLabel listeLabel = new JLabel("Zutatenliste");
		listeLabel.setAlignmentX(SwingConstants.LEFT);
		groesseEinsetzen(listeLabel, 560, 20);
		listeLabelBox.add(listeLabel);
		zutatenPanel.add(listeLabelBox);

		JList zutatenEingabe = new JList();
		zutatenEingabe.setModel(new DefaultListModel());
		JScrollPane scrollZutaten = new JScrollPane(zutatenEingabe);
		groesseEinsetzen(scrollZutaten, 560, 50);
		zutatenPanel.add(scrollZutaten);
		zutatenPanel.add(Box.createRigidArea(new Dimension(0, 10)));
		
		//Listener für die Zugabenliste
		listener.setZutaten(zutatenEingabe);
		return zutatenPanel;
	}
	
	// Hilfsmethode zum exakten Setzen der Groesse einer Komponente
	private static void groesseEinsetzen(JComponent c, int width, int height) {
		Dimension d = new Dimension(width, height);
		c.setPreferredSize(d);
		c.setMaximumSize(d);
		c.setMinimumSize(d);
	}

}
```


----------



## Camino (4. Jun 2011)

Hmm, bisschen viel Code. Ich kann irgendwie die Stelle mit der JComboBox und der Methode getName() nicht finden. Vielleicht solltest du mal nur den relvanten Code posten...


----------



## Sophie (4. Jun 2011)

Danke Camino

Ja, hab mir auch schon gedacht ist ein bisschen viel Code 
Ich dachte nur das sei nötig weil alles miteinander zusammenhängt.
Ich versuch mal nur das relevante rauszusuchen

Also hier ist von der Klasse CocktailsAusgeben Listener:


```
public JTextField getName(JTextField name) {
		this.nameText = name;
		return name;
		
	}
```

und hier der Versuch das in die JComboBox einzufügen in der Klasse CocktailsAusgebenPanel

```
jbox.addItem(getName());
```

Mit dieser Methode wird der Cocktailname in der Klasse Cocktail neu gespeichert:

```
private void speichern(){
		cocktail.setName(cocktailName.getText());
		cocktail.setZubereitung(zubereitung.getText());
		mixer.getCocktailBar().addCocktail(cocktail);
		cocktail = new Cocktail(null);
		zutatenListe.setModel(new DefaultListModel());
		resetText();
	}
```


```
public void setName(JTextField name){
		
		this.cocktailName = name;
	}
```


----------



## Camino (4. Jun 2011)

Irgendwie komisch: die Methode getName() ist in einer anderen Klasse wie die JComboBox jbox. Kommt da überhaupt was bei der JComboBox an, wenn du so darauf zugreifst? Ausserdem liefert getName() ein JTextField zurück, welches du dann der JComboBox hinzufügen möchtest.
Mir ist der Zusammenhang zwischen der Methode und der JComboBox immer noch nicht so richtig klar. Was möchtest du erreichen? Du willst Cocktailnamen in der JComboBox auflisten? Was passiert denn mit dem bisherigen Code? Gibt es evtl. Fehlermeldungen? Was gibt den getName() auf der Konsole aus? Und was macht der Listener?


----------



## Camino (4. Jun 2011)

Das hier sieht sehr komisch aus (Klasse CocktailsAusgebenPanel):
[JAVA=73]JTextField JTextField = null;
listener1.getName(JTextField);[/code]


----------



## Sophie (4. Jun 2011)

Hallo Camino

Ja, die Methode getName() sollte in CocktailsAusgebenListener enthalten sein.

Das sollte alles so Ablaufen. Der Benutzer gibt über das CocktailNeuPanel einen Cocktailnamen ein. Der wird dann in der Klasse CocktailBar gespeichert.
In einem anderen Panel sollen dann alle gespeicherten Cocktailnamen in einer JComboBox aufgelistet sein.

Ich bekomme keine Fehlermeldungen. Jedoch ist die JComboBox leer.

Wenn ich mir die Methode getName() auf der Konsole ausgeben lasse dann steht dort null.

Das Problem ist, ich weiss nicht, wie ich auf die Cocktailnamen, die ich vorher mit Hilfe von CocktailNeuPanel gespeichert habe zugreifen kann um diese dann in die JComboBox zu füllen.

(Den komischen Code habe ich inzwischen rausgenommen. Ist noch ein Überbleibsel aus meinen zahlreichen "Versuchen")


----------



## Volvagia (5. Jun 2011)

[java=65]
JComboBox jbox = new JComboBox();
[/code]

[java=117]
jbox.addItem(getName());
[/code]

Warum fügst du den Component-Namen der ComboBox hinzu? Rufst du da die Methode der falschen Klasse auf?


Warum machst du das so kompliziert? 1 ActionListener für alles ist doch total unübersichtlich. Gib doch jeden Component seinen eigenen kleinen Listener. Den Listener die Instanz der Buttons zu geben, nur damit dieser den Source testen kann ist sehr umständlich.
Warum legst du Klassenvariablen an, auf die nur innerhalb einer Methode zugegriffen wird?
Warum kommentierst du so viel? Das lenkt doch nur vom eigendlichen Source ab. Bis auf ein paar Ausnahmen wie Bitweise Operationen ist imho der schönste Kommentar ein netter Variablen- oder Methodenname. Wenn man ihm liest sollte man schon wissen was gemacht wird. Und natürlich noch ein Javadoc-Kommentar.

z. B.:


```
private JPanel neuPanel;//neuen Cocktail-Anlegungspanel
```


```
private JPanel neuesCocktailPanel;
```

Schon weiß man, wofür es da ist.


----------



## Camino (5. Jun 2011)

Sorry, aber für mich ist dein Code ein Riesen-Chaos. Ich blick da wirklich nicht durch, was da mit was zusammenhängen soll. Ich seh keine Klasse Cocktail. Und wie die Daten dann dauerhaft abgespeichert werden, versteh ich auch nicht. Irgendwie werden die in Dateien gespeichert? Aber wie genau? Und wie werden die dann wieder eingelesen? Werden die Cocktail-Objekte dann in eine List hinzugefügt, aus der sie dann wieder ausgelesen werden können? Du solltest dir vielleicht erst nochmal die Gesamtstruktur deines Programms überlegen. Vielleicht sind ja aber auch noch zu viele Überbleibsel von deinen vorherigen Versuchen vorhanden. Mehr Übersichtlichkeit könnte jedenfalls nicht schaden.


----------



## Camino (5. Jun 2011)

Ich hab mir jetzt mal die Mühe gemacht, und deinen Code in ein neues Eclipse-Projekt eingefügt. Es werden da nun mehrere Fehler angezeigt, z.B. fehlen die Klassen Cocktail, CocktailBar und Zutat.

Edit: Wenn du diese Klassen noch posten würdest, könnte ich dein Programm evtl. mal bei mir in Eclipse zum Laufen bringen und genauer nachschauen. Bin aber auch nicht mehr lange wach...


----------



## Sophie (5. Jun 2011)

Hallo Ihr Zwei

Vielen Dank für Eure Hilfe!
Ich habe das jetzt in (denke ich) gelöstt. Habe jetzt noch ein kleines Problem mit dem Array, dafür mache ich aber lieber mal ein anderes Thema auf.

Gruss
Sophie


----------

