In ArrayList wird nicht der richtige Wert gespeichert

Frexit

Mitglied
Hallo,

wie der Titel schon sagt wird in meiner ArrayList nicht der richtige Wert gespeichert. Ich hab ein kleines Programm welches einen Titel als String entgegennimmt und diesen in einer ArrayList abspeichern soll.
Die Frage ist jetzt, wo liegt mein Fehler das ständig der Wert null in der ArrayList abgespeichert wird.

Java:
public class Buch {

	private String titel;
	
	
	public void setTitel(String titel) {
		this.titel = titel;
	}
	
	public String getTitel() {
		return titel;
	}
}

Java:
import java.util.ArrayList;


public class BuchController {

	Buch buch = new Buch();
	
	ArrayList<String> list = new ArrayList<String>();
	
	
	public BuchController() {

	}
	
	public void speichere() {
		list.add(buch.getTitel());
	}
	
	public void ausgeben() {
		for(String s : list) 
		System.out.println(s);
			
		}
	}

Java:
public class BuchGUI extends JFrame implements ActionListener {
	
	InputStreamReader isr = new InputStreamReader(System.in);
   	BufferedReader reader = new BufferedReader(isr);

	JButton button_speichere, button_beenden, button_ausgeben;
	JTextField text_titel;
	JLabel label_titel;
	
	BuchController bc = new BuchController();
	
   		public void init() throws ClassNotFoundException, SQLException, IOException {
   		
   			label_titel = new JLabel("Titel:");
   			
   			text_titel = new JTextField(20);
   			
   			button_speichere = new JButton("Speichern");
   			button_beenden = new JButton("Beenden");
   			button_ausgeben = new JButton("Ausgeben");
   			
   			Panel pbutton = new Panel();
   			Panel ptext = new Panel();
   			Panel plabel = new Panel();
   			
   			plabel.setLayout(new GridLayout(3, 3));
 			plabel.add(label_titel);
   			
   			ptext.setLayout(new GridLayout(3, 3));
   			ptext.add(text_titel);
   			
   			pbutton.setLayout(new FlowLayout());
   			pbutton.add(button_speichere);
   			pbutton.add(button_beenden);
   			pbutton.add(button_ausgeben);
   			
   			setLayout(new BorderLayout());
   			add("West", plabel);
   			add("East", ptext);
   			add("South", pbutton);
   			
   			button_speichere.addActionListener(this);
   			button_beenden.addActionListener(this);
   			button_ausgeben.addActionListener(this);
}

   		public BuchGUI() throws ClassNotFoundException, SQLException, IOException {
    		super(); init();
    	    pack();   show();
   	
    	    Buch buch = new Buch();
    	    
    	    text_titel.setText(reader.readLine());
    		buch.setTitel(text_titel.getText());
    	    
   		}
   		
		@Override
		public void actionPerformed(ActionEvent arg0) {
			// TODO Auto-generated method stub
			if(arg0.getSource() == button_speichere)
				bc.speichere();
			if(arg0.getSource() == button_beenden)
				System.exit(0);
			if(arg0.getSource() == button_ausgeben)
				bc.ausgeben();
		}
}


Java:
import java.io.IOException;
import java.sql.SQLException;


public class Buchprogramm {
public static void main(String[] args) throws ClassNotFoundException, SQLException, IOException {
	
	new BuchGUI();
}
}
 
du rufst setTitel auf das falsche Buch-Objekt auf. Dein BuchController hat sein eigenes Buch-Objekt, dessen Titel beim speichern genommen wird. Auf dieses wird jedoch nie setTitle aufgerufen.
 
Ich hab jetzt ein Objekt der BuchController-Klasse erstellt welches dann auf das Objekt der Buch-Klasse zugreift, aber richtig kann das ja nicht sein.


Java:
public BuchGUI() throws ClassNotFoundException, SQLException, IOException {
            super(); init();
            pack();   show();
    
            BuchController bc = new BuchController();
            
              text_titel.setText(reader.readLine());
              bc.buch.setTitel(text_titel.getText());
        }
 
Du solltest einfach den BuchController bc benutzen den du bereits als Membervariable hast anstatt einen 2. zu erstellen...
 
Hallo,

selbst wenn ich die Membervariable verwende bleibt der übergebene Wert an die Methode setTitel null.
Wenn ich den BuchController bc verwende und damit das Objekt der Klasse Buch aufrufe, welches dann
die Methode setTitel aufruft, sollte es doch eigentlich gehen.
 
Du hast da anscheinend das MVC Pattern falsch verstanden. Dein BuchController ist alles andere als ein Controller, eher ein Model für eine Bibliothek. Die Controller sind bei dir die Listener.
 
@bERt0r

Ich hab mir hier gerade das Tutorial zum MVC Pattern angesehen und werde erstmal meinen Code anpassen. Ich hoffe das sich dadurch alle anderen Probleme automatisch lösen.
 

Zurück
Oben