JComboBox füllen

Sophie

Grünschnabel
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

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

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

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

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

Code:
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);
    }
 
}
 
Hi,

Deine getName()-Methode macht denke ich mal nur so Sinn:
Java:
public JTetField getName() {
     return name;
}
du brauchst wohl außerdem noch ne setName()-Methode:
Java:
public void setName(JTextField name) {
     this.name = name;
}
Das hier ergibt für mich nun gar keine Logik:
Java:
JTextField JTextField = null;
listener1.getName(JTextField);
meinst du vielleicht:
Java:
JTextField textFeld = listener1.getName();

hoffentlich hilfts dir weiter,
javaDeveloper2011
 
Hallo javaDelevolper2011

Den komischen Code habe ich rausgenommen, ich habe das übersehen, ich habe schon ziemlich viel ausprobiert und dass habe ich vergessen zu löschen.

Die getName() Methode habe ich schon einmal so ausprobiert, wie Du das vorschlägst, das funktioniert aber leider auch nicht. Die setName() Methode habe ich in CocktailNeuListener.

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.

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.

Hast Du vielleicht eine Idee?
 
Hallo Sophie
Bitte schreibe deinen Code nicht in die [code] [/code]-Tags, sondern in die [code=java] [/code]-Tags, das verbessert die lesbarkeit deutlich!

Zu deinem Problem: Warum hast du in CocktailsAusgebenPanel Zeilen 120ff auskommentiert? Warum enthält das String[] lang (CocktailsAusgebenPanel:26) keine Elemente und ist auskommentiert? Es ist ungünstig, die Methode getName() zu nennen, da du damit eine Methode von java.awt.Component überschreibst. Die Methode getName() ist aber für den Namen des Components gedacht, nicht für z.B. irgend welche Cocktails.

Außerdem:
Die Methode groesseEinsetzen() legt absolute Werte fest. Das ist in den meisten Fällen schlecht oder falsch, denn jede noch so kleine Änderung am System (Aussehen deines Betriebssystemes, installierte Schriftarten, ...) oder an den Java-eigenen Look-and-Feels könnte dir die graphische Oberfläche völlig unbrauchbar machen. Die Verwendung von absoluten Werten in der GUI ist meist eine Folge von der Verwendung eines nicht geeigneten Layoutmanagers.

Ich probiere deinen Code mal aus, dann melde ich mich noch mal
 
Hallo genodeftest

Danke für die Antwort.
Also auskommentiert habe ich dass, weil ich ersteinmal versucht habe die jBox mit ganz normalen Strings zu füllen.
Das hat auch funktioniert. Allerdings sah das so aus:

Java:
String[] lang = { "1 ", "2", "3" } ;

Danke für den Tip mit getName() das wusste ich nicht.
 
Also:
Du fügst zur jbox in CocktailsAusgebenPanel:118 mit
Java:
 jbox.addItem(getName());
den Namen des aktuellen Panels hinzu. Dies ist (scheinbar) nicht beabsichtigt, denn es gibt keinen Sinn und der Name des Panels ist nicht einmal gesetzt. Daher muss die jbox einen leeren String enthalten.

Vermutlich möchtest du, dass die Methode getName() aus CocktailsAusgebenListener aufgerufen wird. Dazu müsstest du aber eine Instanz dieses listeners haben. z.B.:
Java:
CocktailsAusgebenListener listener; // den erzeugst du irgend wo
listener.getName(); // diese Methode gibt den Namen zurück – vorausgesetzt, du hast den Namen vorher auch gesetzt!!

Wie vorhin bereits geschrieben, benenne die Methode am besten um, dann fällt der Fehler schneller auf. Ein sinnvoller Name wäre beispielsweise getCocktailName()
 
ok, das hab ich soweit verstanden

Das Ganze sieht jetzt so aus;

Java:
private CocktailsAusgebenListener listener1;
listener1.getCocktails();
jbox.addItem(cocktail);

Meine Methode sieht jetzt so aus;
Java:
public Cocktail[] getCocktails() {
        return cocktails.toArray(new Cocktail[0]);
    }

Es steht jedoch nichts in der JBox. Wie mache ich das denn jetzt, dass aus dem Array, die cocktails einzeln aufgelistet werden?
 
Dein Problem liegt hier:
Java:
public Cocktail[] getCocktails() {
        return cocktails.toArray(new Cocktail[0]);
    }

stattdessen solltest du so etwas machen wie
Java:
public Cocktail[] getCocktails() {
        Cocktail[] cocktails = { new Cocktail("Tequila Sunrise", true, "weitere", "Argumente"),
                new Cocktail("Pisco Sour", true, "weitere", "Argumente"),
                new Cocktail("Paradise", true, "weitere", "Argumente"),
                new Cocktail("Long Island", true, "weitere", "Argumente")};
        return cocktails;
    }
Wobei natürlich die Parameter/Argumente des Constructors je nach Bedarf genutzt werden. Das hängt u.a. davon ab, wie der Construcktor der Klasse Cocktail aussieht.

Noch besser wäre, du würdest in einer deiner Klassen eine ArrayList erzeugen, zu der du die neuen Cocktails jeweils hinzufügst/von der du die alten Elemente löscht.
 
Hallo genodefest

Der Benutzer soll ja zunächst die Cocktails eingeben, diese sollen dann in ein Array abgespeichert werden und dann soll das in die JComboBox gefüllt werden.
 
Wenn die Daten erst vom Benutzer eingegeben werden, solltest du auf keinen Fall ein Array verwenden, sondern besser eine ArrayList (oder eine andere Collection)!
 
Zurück