tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
9
ZUGRIFFE
857
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Sophie Sophie ist offline Rookie
    Registriert seit
    Jun 2010
    Beiträge
    8
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    
    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);
        }
     
    }
     

  2. #2
    Avatar von javaDeveloper2011
    javaDeveloper2011 javaDeveloper2011 ist offline Mitglied Brokat
    Registriert seit
    Feb 2011
    Beiträge
    445
    Blog-Einträge
    5
    Hi,

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

    hoffentlich hilfts dir weiter,
    javaDeveloper2011
     

  3. #3
    Sophie Sophie ist offline Rookie
    Registriert seit
    Jun 2010
    Beiträge
    8
    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?
     

  4. #4
    genodeftest genodeftest ist offline Mitglied Brillant
    Registriert seit
    Jun 2009
    Beiträge
    870
    Hallo Sophie
    Bitte schreibe deinen Code nicht in die [code] [/code]-Tags, sondern in die [java] [/java]-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
     
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.
    ___________
    Ubuntu Bug #1: Microsoft has a majority market share
    Casecon: Projekt leiser Käse

  5. #5
    Sophie Sophie ist offline Rookie
    Registriert seit
    Jun 2010
    Beiträge
    8
    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:

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

    Danke für den Tip mit getName() das wusste ich nicht.
     

  6. #6
    genodeftest genodeftest ist offline Mitglied Brillant
    Registriert seit
    Jun 2009
    Beiträge
    870
    Also:
    Du fügst zur jbox in CocktailsAusgebenPanel:118 mit
    Code java:
    1
    
     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.:
    Code java:
    1
    2
    
    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()
     
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.
    ___________
    Ubuntu Bug #1: Microsoft has a majority market share
    Casecon: Projekt leiser Käse

  7. #7
    Sophie Sophie ist offline Rookie
    Registriert seit
    Jun 2010
    Beiträge
    8
    ok, das hab ich soweit verstanden

    Das Ganze sieht jetzt so aus;

    Code java:
    1
    2
    3
    
    private CocktailsAusgebenListener listener1;
    listener1.getCocktails();
    jbox.addItem(cocktail);

    Meine Methode sieht jetzt so aus;
    Code java:
    1
    2
    3
    
    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?
     

  8. #8
    genodeftest genodeftest ist offline Mitglied Brillant
    Registriert seit
    Jun 2009
    Beiträge
    870
    Dein Problem liegt hier:
    Code java:
    1
    2
    3
    
    public Cocktail[] getCocktails() {
            return cocktails.toArray(new Cocktail[0]);
        }

    stattdessen solltest du so etwas machen wie
    Code java:
    1
    2
    3
    4
    5
    6
    7
    
    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.
     
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.
    ___________
    Ubuntu Bug #1: Microsoft has a majority market share
    Casecon: Projekt leiser Käse

  9. #9
    Sophie Sophie ist offline Rookie
    Registriert seit
    Jun 2010
    Beiträge
    8
    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.
     

  10. #10
    genodeftest genodeftest ist offline Mitglied Brillant
    Registriert seit
    Jun 2009
    Beiträge
    870
    Wenn die Daten erst vom Benutzer eingegeben werden, solltest du auf keinen Fall ein Array verwenden, sondern besser eine ArrayList (oder eine andere Collection)!
     
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.
    ___________
    Ubuntu Bug #1: Microsoft has a majority market share
    Casecon: Projekt leiser Käse

Ähnliche Themen

  1. JComboBox
    Von Olfipolfi im Forum Java Grundlagen
    Antworten: 4
    Letzter Beitrag: 14.05.10, 22:36
  2. JComboBox / Jlist dynamisch aus XML füllen?
    Von martinsig im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 6
    Letzter Beitrag: 20.04.10, 16:59
  3. Antworten: 6
    Letzter Beitrag: 20.04.10, 14:27
  4. JcomboBox(2)
    Von girl2005 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 28.07.05, 08:35
  5. JComboBox
    Von Serethos im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 8
    Letzter Beitrag: 05.11.04, 15:38