ERLEDIGT
NEIN
NEIN
ANTWORTEN
9
9
ZUGRIFFE
857
857
EMPFEHLEN
-
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); } }
-
Hi,
Deine getName()-Methode macht denke ich mal nur so Sinn:
du brauchst wohl außerdem noch ne setName()-Methode:Code java:1 2 3
public JTetField getName() { return name; }
Das hier ergibt für mich nun gar keine Logik:Code java:1 2 3
public void setName(JTextField name) { this.name = name; }
meinst du vielleicht:Code java:1 2
JTextField JTextField = null; listener1.getName(JTextField);
Code java:1
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?
-
04.06.11 23:34 #4
- 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 malCode bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.Code java:1
System.out.println("Hallo");
___________
Ubuntu Bug #1: Microsoft has a majority market share
Casecon: Projekt leiser Käse
-
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.
-
04.06.11 23:53 #6
- Registriert seit
- Jun 2009
- Beiträge
- 870
Also:
Du fügst zur jbox in CocktailsAusgebenPanel:118 mitden 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.Code java:1
jbox.addItem(getName());
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)
hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.Code java:1
System.out.println("Hallo");
___________
Ubuntu Bug #1: Microsoft has a majority market share
Casecon: Projekt leiser Käse
-
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?
-
05.06.11 10:24 #8
- 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
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.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; }
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)
hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.Code java:1
System.out.println("Hallo");
___________
Ubuntu Bug #1: Microsoft has a majority market share
Casecon: Projekt leiser Käse
-
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.
-
05.06.11 14:59 #10
- 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)
hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.Code java:1
System.out.println("Hallo");
___________
Ubuntu Bug #1: Microsoft has a majority market share
Casecon: Projekt leiser Käse
Ähnliche Themen
-
JComboBox
Von Olfipolfi im Forum Java GrundlagenAntworten: 4Letzter Beitrag: 14.05.10, 22:36 -
JComboBox / Jlist dynamisch aus XML füllen?
Von martinsig im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 6Letzter Beitrag: 20.04.10, 16:59 -
JComboBox füllen ruft NullPointerException auf
Von Tinipieps im Forum JavaAntworten: 6Letzter Beitrag: 20.04.10, 14:27 -
JcomboBox(2)
Von girl2005 im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 2Letzter Beitrag: 28.07.05, 08:35 -
JComboBox
Von Serethos im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 8Letzter Beitrag: 05.11.04, 15:38





Zitieren
Login





