# bestimmte Objekte in ArrayList auslesen



## wnbe (23. Mai 2012)

Hallo 

ich habe eine Aufgabe ein Fahrtenbuch zu programmieren. Das Layout ist per Swing erstellt und es funktioniert soweit alle mit dem speichern und drucken.

So sieht das ganze aus





Ich komme leider nicht bei den Buttons links unten weiter. Dort sollen jeweils die beiden Äußeren das erste und das letzte Objekt ausgeben und mit den Mittleren soll man weiterschalten können.

Die Fahrten sind als Objekte in einer Arraylist eingetragen. Ich bin soweit, dass jeweils das letzte eingetragene Objekt ausgegeben wird. Mein Problem liegt darin, die bestimmten Objekte, also eins vor eins weiter usw. auszugeben. Unten steht der Quellcode. Wie kann ich an die Sache rangehen?

Vielen Dank und schöne Grüße!

Das Fahrtenbuch:

```
import java.awt.EventQueue;

public class Fahrtenbuch {

	private JFrame frame;
	private JTextField textFieldVon;
	private JTextField textFieldNach;
	private JTextField textFieldAbfahrt;
	private JTextField textFieldAnkunft;
	private JTextField textFieldKm1;
	private JTextField textFieldKm2;
	
	private ArrayList<Fahrt> fahrtenbuch = new ArrayList<Fahrt>();

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Fahrtenbuch window = new Fahrtenbuch();
					window.frame.setVisible(true);
					window.frame.pack(); 	
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public Fahrtenbuch() {
		initialize();
	}
	
	/**
	 * Initialize the contents of the frame.
	 */
	/**
	 * 
	 */
	private void initialize() {
		frame = new JFrame();
		frame.setBounds(100, 100, 500, 274);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		textFieldVon = new JTextField();
		textFieldVon.setColumns(10);
		
		JLabel lblVon = new JLabel("Von");
		
		JLabel lblFahrtenbuch = new JLabel("Fahrtenbuch");
		lblFahrtenbuch.setFont(new Font("Tahoma", Font.BOLD, 16));
		
		textFieldNach = new JTextField();
		textFieldNach.setColumns(10);
		
		JLabel lblNach = new JLabel("Nach");
		
		JLabel lblAbfahrtszeit = new JLabel("Abfahrtszeit");
		
		JLabel lblAnkunftszeit = new JLabel("Ankunftszeit");
		
		textFieldAbfahrt = new JTextField();
		textFieldAbfahrt.setColumns(10);
		
		textFieldAnkunft = new JTextField();
		textFieldAnkunft.setColumns(10);
		
		JLabel lblKmstand = new JLabel("KM-Stand");
		
		JLabel lblKmstand_1 = new JLabel("KM-Stand");
		
		textFieldKm1 = new JTextField();
		textFieldKm1.setColumns(10);
		
		textFieldKm2 = new JTextField();
		textFieldKm2.setColumns(10);
		
		JButton btnNeu = new JButton("Neu");
		btnNeu.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				felderLeeren();
			}
		});

		
		JButton btnSpeich = new JButton("Speichern");		
		btnSpeich.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent arg0) {
				
				int km1 = Integer.parseInt(textFieldKm1.getText());
				int km2 = Integer.parseInt(textFieldKm2.getText());
				Fahrt f1 = new Fahrt(textFieldVon.getText(), textFieldNach.getText(), textFieldAbfahrt.getText(), textFieldAnkunft.getText(), km1, km2);
				fahrtenbuch.add(f1);
				felderLeeren(); 
			}

			
		});
		
		
		
		JButton btnDrucken = new JButton("Drucken");
		btnDrucken.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				for(Fahrt f : fahrtenbuch){
					System.out.println(f);
				}
			}
		});
		
		JPanel panel = new JPanel();
		GroupLayout groupLayout = new GroupLayout(frame.getContentPane());
		groupLayout.setHorizontalGroup(
			groupLayout.createParallelGroup(Alignment.LEADING)
				.addGroup(groupLayout.createSequentialGroup()
					.addContainerGap()
					.addGroup(groupLayout.createParallelGroup(Alignment.TRAILING)
						.addComponent(lblNach)
						.addComponent(lblVon))
					.addPreferredGap(ComponentPlacement.RELATED)
					.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
						.addComponent(panel, GroupLayout.PREFERRED_SIZE, 255, GroupLayout.PREFERRED_SIZE)
						.addGroup(groupLayout.createSequentialGroup()
							.addComponent(btnNeu)
							.addPreferredGap(ComponentPlacement.RELATED)
							.addComponent(btnSpeich)
							.addPreferredGap(ComponentPlacement.RELATED)
							.addComponent(btnDrucken))
						.addGroup(groupLayout.createSequentialGroup()
							.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
								.addComponent(textFieldNach, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
								.addComponent(textFieldVon, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
							.addGap(30)
							.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
								.addComponent(lblFahrtenbuch)
								.addGroup(groupLayout.createSequentialGroup()
									.addGroup(groupLayout.createParallelGroup(Alignment.LEADING, false)
										.addGroup(groupLayout.createSequentialGroup()
											.addComponent(lblAnkunftszeit)
											.addPreferredGap(ComponentPlacement.RELATED)
											.addComponent(textFieldAnkunft, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
											.addPreferredGap(ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
											.addComponent(lblKmstand_1))
										.addGroup(groupLayout.createSequentialGroup()
											.addComponent(lblAbfahrtszeit)
											.addPreferredGap(ComponentPlacement.RELATED)
											.addComponent(textFieldAbfahrt, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
											.addGap(32)
											.addComponent(lblKmstand)))
									.addPreferredGap(ComponentPlacement.RELATED)
									.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
										.addComponent(textFieldKm2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
										.addComponent(textFieldKm1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))))))
					.addGap(21))
		);
		groupLayout.setVerticalGroup(
			groupLayout.createParallelGroup(Alignment.LEADING)
				.addGroup(groupLayout.createSequentialGroup()
					.addContainerGap()
					.addComponent(lblFahrtenbuch)
					.addGap(9)
					.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
						.addComponent(lblVon)
						.addComponent(textFieldVon, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(lblAbfahrtszeit)
						.addComponent(textFieldAbfahrt, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(lblKmstand)
						.addComponent(textFieldKm1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
					.addPreferredGap(ComponentPlacement.RELATED)
					.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
						.addComponent(lblNach)
						.addComponent(textFieldNach, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(lblAnkunftszeit)
						.addComponent(textFieldAnkunft, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(lblKmstand_1)
						.addComponent(textFieldKm2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
					.addGap(38)
					.addGroup(groupLayout.createParallelGroup(Alignment.LEADING, false)
						.addComponent(btnDrucken, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
						.addComponent(btnSpeich, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
						.addComponent(btnNeu, GroupLayout.DEFAULT_SIZE, 36, Short.MAX_VALUE))
					.addGap(18)
					.addComponent(panel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
					.addContainerGap(29, Short.MAX_VALUE))
		);
		
		JButton button = new JButton("|<");
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				for(Fahrt f : fahrtenbuch){
	
				System.out.println(f);
			
			    String km1 = String.valueOf(f.getKmFahrtbeginn());
			    String km2 = String.valueOf(f.getKmFahrtende());
				
				textFieldVon.setText(f.getVon());
				textFieldNach.setText(f.getNach());
				textFieldKm1.setText(km1);
				textFieldKm2.setText(km2);
				textFieldAbfahrt.setText(f.getAbfahrtszeit());
				textFieldAnkunft.setText(f.getAnkunftszeit());
				
			}}}
		);
		panel.add(button);
		
		JButton button_1 = new JButton("<");
		panel.add(button_1);
		
		JButton button_2 = new JButton(">");
		panel.add(button_2);
		
		JButton button_3 = new JButton(">|");
		panel.add(button_3);
		frame.getContentPane().setLayout(groupLayout);
	}

	private void felderLeeren() {
		textFieldAbfahrt.setText(""); textFieldAnkunft.setText(""); textFieldKm1.setText(""); textFieldKm2.setText(""); textFieldNach.setText(""); textFieldVon.setText("");
	}
}
```

Die Klasse Fahrt:

```
public class Fahrt {

	private String von;
	private String nach;
	private String abfahrtszeit;
	private String ankunftszeit;
	private int kmFahrtbeginn;
	private int kmFahrtende;
	
	public Fahrt(String von, String nach, String abfahrtszeit,
			String ankunftszeit, int kmFahrtbeginn, int kmFahrtende) {
		super();
		this.setVon(von);
		this.nach = nach;
		this.abfahrtszeit = abfahrtszeit;
		this.ankunftszeit = ankunftszeit;
		this.kmFahrtbeginn = kmFahrtbeginn;
		this.kmFahrtende = kmFahrtende;
	}

	
	
	

	public  String getVon() {
		return von;
	}





	public void setVon(String von) {
		this.von = von;
	}





	public String getNach() {
		return nach;
	}





	public void setNach(String nach) {
		this.nach = nach;
	}





	public String getAbfahrtszeit() {
		return abfahrtszeit;
	}





	public void setAbfahrtszeit(String abfahrtszeit) {
		this.abfahrtszeit = abfahrtszeit;
	}





	public String getAnkunftszeit() {
		return ankunftszeit;
	}





	public void setAnkunftszeit(String ankunftszeit) {
		this.ankunftszeit = ankunftszeit;
	}





	public int getKmFahrtbeginn() {
		return kmFahrtbeginn;
	}





	public void setKmFahrtbeginn(int kmFahrtbeginn) {
		this.kmFahrtbeginn = kmFahrtbeginn;
	}





	public int getKmFahrtende() {
		return kmFahrtende;
	}





	public void setKmFahrtende(int kmFahrtende) {
		this.kmFahrtende = kmFahrtende;
	}





	@Override
	public String toString() {
		return "Fahrt [von=" + getVon() + ", nach=" + nach + ", abfahrtszeit="
				+ abfahrtszeit + ", ankunftszeit=" + ankunftszeit
				+ ", kmFahrtbeginn=" + kmFahrtbeginn + ", kmFahrtende="
				+ kmFahrtende + "]";
	}
	
	
}
```


----------



## Plopo (23. Mai 2012)

Eine Object in einer Arraylist kannst du ja mit "fahrtenbuch.get(int position);" direkt aufrufen/auslesen.
Nun speicherst du die "position" als Klassenvariable ab und hast somit immer die aktuelle Position der angezeigten Fahrt.

Nun einfach die Buttons mit einer Rechnung verknüpfen:

nächste Fahrt = fahrtenbuch.get(position+1);
vorherige Fahrt = fahrtenbuch.get(position-1);
erste Fahrt = fahrtenbuch.get(0);
letzte Fahrt = fahrtenbuch.get(fahrtenbuch.size()-1);

Voraussetzung ist, dass alle Fahrten sich in der ArrayList befinden.
Natürlich musst du auf eine ArrayOutOfBoundException achten


----------



## Crian (23. Mai 2012)

Weia, was ist dass denn?



> ```
> groupLayout.setHorizontalGroup(
> groupLayout.createParallelGroup(Alignment.LEADING)
> .addGroup(groupLayout.createSequentialGroup()
> ...


----------



## wnbe (23. Mai 2012)

Okay, danke für die Antwort..werde ich nach dem Mittag mal testen 
und Crian, das hat unser super Dozent so vorgegeben, also das Layout wurde so gestellt 

Achja, bevor ich es vergesse... Wenn eine Fahrt offen ist und man eine Änderung vornimmt, soll es auf "Speichern" aktualisiert werden. Wie funktioniert das?


----------



## Mr.Bacon (23. Mai 2012)

Die Realisierung des Layouts ist echt schlimm (für so ne kleine GUI). Sinnvoller wäre es ein BorderLayout herzunehmen und z. B. die Button über ein Panel gruppieren. .. Kannst dem Dozenten ja mal nen Gruß ausrichten


----------



## Mr.Bacon (23. Mai 2012)

LukeS hat gesagt.:
			
		

> Achja, bevor ich es vergesse... Wenn eine Fahrt offen ist und man eine Änderung vornimmt, soll es auf "Speichern" aktualisiert werden. Wie funktioniert das?



Am Besten machst du dir eine Methode, die dir alle Daten in die Textfelder hinein schreib:
irgendwie sowas:


```
private void loadData(Fahrt fahrt) {
        
        textfeld1.setText(fahrt.getIrgendewas());
        textfeld2.setText(fahrt.getIrgendewas());
        
        ....
    }
```

diese kannst du dann immer aufrufen, wenn du gespeichert hast, oder eine andere Fahrt in die GUI laden willst.


----------



## c_sidi90 (23. Mai 2012)

sieht mir nach Jígloo GUI Builder aus


----------



## wnbe (23. Mai 2012)

So es funktioniert. Danke 

Probleme hab ich allerdings noch mit dem speichern. Die Methode loadData habe ich einfachmal geschrieben, wo soll sie aufgerufen werden? Wahrscheinlich verstehe ich einfach nicht genau, was sie bewirkt  Könnte mir da noch jemand helfen?


----------



## Mr.Bacon (23. Mai 2012)

Was für Probleme hast du beim Speichern?

Die loadData methode kann man immer hernehemn, um die daten neu zu laden oder bei deinen Pfeil-Buttons eine andere Fahrt in die Gui zu laden


----------

