JComboBox füllen

Sophie

Bekanntes Mitglied
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

Java:
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;
		
	} 
}

Java:
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);
	}
}

Java:
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:

Java:
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;
		
	}
	
	
}

Java:
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);
	}

}
 
C

Camino

Gast
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

Bekanntes Mitglied
Danke Camino

Ja, hab mir auch schon gedacht ist ein bisschen viel Code :oops:
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:

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

und hier der Versuch das in die JComboBox einzufügen in der Klasse CocktailsAusgebenPanel
Java:
jbox.addItem(getName());

Mit dieser Methode wird der Cocktailname in der Klasse Cocktail neu gespeichert:
Java:
private void speichern(){
		cocktail.setName(cocktailName.getText());
		cocktail.setZubereitung(zubereitung.getText());
		mixer.getCocktailBar().addCocktail(cocktail);
		cocktail = new Cocktail(null);
		zutatenListe.setModel(new DefaultListModel());
		resetText();
	}
Java:
public void setName(JTextField name){
		
		this.cocktailName = name;
	}
 
C

Camino

Gast
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?
 
C

Camino

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

Sophie

Bekanntes Mitglied
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

Top Contributor
[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.:

Java:
private JPanel neuPanel;//neuen Cocktail-Anlegungspanel
Java:
private JPanel neuesCocktailPanel;

Schon weiß man, wofür es da ist.
 
Zuletzt bearbeitet:
C

Camino

Gast
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.
 
C

Camino

Gast
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...
 
Zuletzt bearbeitet von einem Moderator:

Sophie

Bekanntes Mitglied
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
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S JComboBox automatisch füllen Java Basics - Anfänger-Themen 3
S JComboBox mit ArrayList füllen Java Basics - Anfänger-Themen 7
G 2. JComboBox in Abhängigkeit der 1. JCombobox füllen Java Basics - Anfänger-Themen 2
M füllen JComboBox funktioniert nicht Java Basics - Anfänger-Themen 11
dercheffe 3x jcombobox nacheinander füllen Java Basics - Anfänger-Themen 6
E Meine JCombobox werte an ohne selectiert zu haben Java Basics - Anfänger-Themen 6
D Probleme mit dem Windowbuilder und JComboBox Java Basics - Anfänger-Themen 2
J Selektiertes Element von jComboBox zwischenspeichern und wieder einsetzen Java Basics - Anfänger-Themen 0
C Erste Schritte JComboBox Einträge auf Duplikat prüfen Java Basics - Anfänger-Themen 4
A Mit JComboBox Ergebnis einen Integer aus einer anderen Klasse aufrufen. Java Basics - Anfänger-Themen 2
M JComboBox ersten Eintrag leerlassen bzw. Platzhalter Java Basics - Anfänger-Themen 1
Tommy135 Klassen jComboBox macht nicht was sie soll Java Basics - Anfänger-Themen 4
S ArrayListe in einer JComboBox anzeigen Java Basics - Anfänger-Themen 10
H JComboBox wird nicht angezeigt Java Basics - Anfänger-Themen 3
M JComboBox feste double Werte zu ordnen Java Basics - Anfänger-Themen 8
T Einträge in jComboBox aus Liste übernehmen Java Basics - Anfänger-Themen 1
T Auslesen mehrerer jComboBox (-en) Java Basics - Anfänger-Themen 4
H JCombobox Java Basics - Anfänger-Themen 1
D JComboBox duplizieren Java Basics - Anfänger-Themen 2
T jComboBox Java Basics - Anfänger-Themen 9
GadgetSofa jComboBox mit dem Button verbinden. Aber wie?? Java Basics - Anfänger-Themen 4
A GUI Absturz nach 3x benutzen einer JComboBox Java Basics - Anfänger-Themen 11
S Erste Schritte JComboBox Java Basics - Anfänger-Themen 1
S JCombobox und JButton verknüpfen Java Basics - Anfänger-Themen 6
C JComboBox "Hilfstext" anzeigen Java Basics - Anfänger-Themen 11
T Datentypen Jcombobox Array Java Basics - Anfänger-Themen 1
J JComboBox in andere Klasse Java Basics - Anfänger-Themen 2
S Variablen auslesen beim JCombobox Java Basics - Anfänger-Themen 0
K JCombobox Eclipse Java Basics - Anfänger-Themen 7
D JComboBox erzeugen Java Basics - Anfänger-Themen 1
T JComboBox Java Basics - Anfänger-Themen 3
B ArrayLists in JCombobox Java Basics - Anfänger-Themen 10
M JComboBox und ItemListener/ItemEvent Problem Java Basics - Anfänger-Themen 3
M JComboBox Auswahl Java Basics - Anfänger-Themen 10
N Compiler-Fehler JComboBox DefaultListCellRenderer Java Basics - Anfänger-Themen 2
J JComboBox - Auswahl auslesen Java Basics - Anfänger-Themen 2
J jcombobox.getSelectedItem - nullpointerexception Java Basics - Anfänger-Themen 3
C JComboBox setSelectedItem(Object) Problem Java Basics - Anfänger-Themen 5
M JComboBox Obergrenzen/Untergrenze festlegen? Java Basics - Anfänger-Themen 5
B JComboBox(editable) Java Basics - Anfänger-Themen 6
K JComboBox hat volle Höhe uber das gesamte JPane, warum? Java Basics - Anfänger-Themen 2
C Ausgewähltes Element einer JCombobox in JTextField Java Basics - Anfänger-Themen 3
C JComboBox Java Basics - Anfänger-Themen 9
R Auf auswahl in ner JComboBox reagieren Java Basics - Anfänger-Themen 3
T Frage zu JComboBox Java Basics - Anfänger-Themen 6
G JComboBox wird nicht gezeichnet Java Basics - Anfänger-Themen 3
N JComboBox mit Dateinamen befüllen Java Basics - Anfänger-Themen 7
M JComboBox => Item String => Color Java Basics - Anfänger-Themen 2
StrikeTom Editable JComboBox + enter Wie??? Java Basics - Anfänger-Themen 3
J JComboBox Listener Java Basics - Anfänger-Themen 6
F Werte aus JComboBox auslesen und Zahlen zuordnen Java Basics - Anfänger-Themen 5
S JComboBox Platzhalter Java Basics - Anfänger-Themen 7
J jComboBox auf default setzen wie? Java Basics - Anfänger-Themen 3
J daten über jComboBox ausgeben wie? Java Basics - Anfänger-Themen 2
S Vector -> String JComboBox Java Basics - Anfänger-Themen 11
E JComboBox Java Basics - Anfänger-Themen 4
J jComboBox.getSelectedIndex() Java Basics - Anfänger-Themen 8
J Funktion Auslösen über JComboBox Java Basics - Anfänger-Themen 2
T JComboBox klappt nur ein- bis zweimal auf Java Basics - Anfänger-Themen 30
S Kein Event bei Click auf JComboBox Java Basics - Anfänger-Themen 4
Developer_X JComboBox getSelectedFilè??? Java Basics - Anfänger-Themen 4
T Daten eines Ordners in JCombobox anzeigen Java Basics - Anfänger-Themen 5
M Einträge in JComboBox farblich hinterlegen? Java Basics - Anfänger-Themen 2
6 Dritte JComboBox in Abhaengigkeit von zwei vorherigen Java Basics - Anfänger-Themen 4
S Problem mit JComboBox Java Basics - Anfänger-Themen 9
H jcombobox mit nur einem Item Java Basics - Anfänger-Themen 7
G Inhalt einer JComboBox wechseln Java Basics - Anfänger-Themen 5
G Problem mit JComboBox Java Basics - Anfänger-Themen 15
G JComboBox Strukturiert anzeigen Java Basics - Anfänger-Themen 6
Schandro Hotkeys bei JComboBox abschalten Java Basics - Anfänger-Themen 3
G JComboBox soll beim Öffnen eine andere JCB öffnen Java Basics - Anfänger-Themen 2
P Hilfe für JComboBox, bmp einbinden/bestimmte punkte auf bmp Java Basics - Anfänger-Themen 3
G JComboBox - BasicComboPopup Java Basics - Anfänger-Themen 4
S Inhalt der JComboBox vergrößtert die JCB ? Java Basics - Anfänger-Themen 2
B Werte aus einer JCombobox in eine Liste Java Basics - Anfänger-Themen 16
mwildam JComboBox FocusGained feuert nicht wenn editable Java Basics - Anfänger-Themen 4
F ComboBox im Vektor auslesen, Vektor<JComboBox> Java Basics - Anfänger-Themen 6
S Jcombobox und 2maliges anzeigen wegen ItemStateChanged? Java Basics - Anfänger-Themen 3
W setModel feuert ActionEvent bei JComboBox Java Basics - Anfänger-Themen 2
G Frage zu JComboBox Java Basics - Anfänger-Themen 2
W Actionlistener oder Itemlistener bei JCombobox ? Java Basics - Anfänger-Themen 4
G JComboBox Java Basics - Anfänger-Themen 7
G JComboBox macht Probleme Java Basics - Anfänger-Themen 7
G JComboBox alphabetisch sortieren Java Basics - Anfänger-Themen 2
D Locale zur Laufzeit über JComboBox laden? Java Basics - Anfänger-Themen 17
G JComboBox um eine Methode erweitern Java Basics - Anfänger-Themen 2
G jcombobox deaktivieren Java Basics - Anfänger-Themen 4
M Werte aus Jcombobox sollten als int-Werte zurück gegeben . Java Basics - Anfänger-Themen 7
D Items in JComboBox überprüfen Java Basics - Anfänger-Themen 3
G JComboBox zweckentfremden ? Java Basics - Anfänger-Themen 5
N JCombobox Pfeil nach unten bild auf linke seite, geht das? Java Basics - Anfänger-Themen 8
T JComboBox Problem Java Basics - Anfänger-Themen 4
D JComboBox titel Java Basics - Anfänger-Themen 16
J JCombobox Item auswählen Java Basics - Anfänger-Themen 13
A Text einer JComboBox während der Laufzeit ändern ? Java Basics - Anfänger-Themen 4
J Inhalt der JComboBox variable Java Basics - Anfänger-Themen 2
O JComboBox Item soll sich als String speichern Java Basics - Anfänger-Themen 5
D JComboBox ohne ItemListener Java Basics - Anfänger-Themen 18
B unvollständige Anzeige von JComboBox Werten Java Basics - Anfänger-Themen 5
G JComboBox gibt SelectedItem immer doppelt aus Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben