# Arraylist - Inhalte in Textferldern anzeigen, verändern und löschen.



## maxth (4. Sep 2009)

Hallo Leute, 

ich hab mal wieder ein Problem, also ich hab eine Klasse die eine Arraylist mit Daten füllt. 
Diese Daten enthalten Namen und Adressen von Personen. In dem Arraylist sind jetzt alle Daten zusammen hängend. Jetzt möchte ich mir die Daten im Textfeld anzeigen lassen, aber immer nur von einer person, und das möchte ich so haben das man einfach durchblättern kann. Aber die Daten haben immer eine feste Position, d.h. Daten Person1 :1 -5 Position Person 2 : 6-10 usw.. 

Jetzt weiß ich nicht ob das überhaupt möglich ist, und wie ich das umsetzten kann. 
Desweiteren wäre es möglich daten zu verändern oder zu löschen?!
Kann man eine Arraylist aus einer anderen Klasse ohne weiteres übernehmen. Und wie sieht das aus. 

Ich hoffe ich bin in diesem Teil des Forums richtig 

Meine KLasse VermieterAnzeigen


```
import java.awt.*;
import java.awt.event.*;
 
import javax.swing.*;
 
public class VermieterAnzeigen extends JFrame {
    
    Vermieter vermieter = new Vermieter(); //Klasse der Arraylist
    
	
    private JTextField textField1;
    private JTextField textField2;
    
    
    private JButton next;
    private JButton back;
    private JButton loeschen;
    private JButton aendern;
    
    
    public VermieterAnzeigen() {
    	super("Anzeige");
        this.setLayout(new GridLayout(3, 1));
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setBounds(0, 0, 300, 200);
        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        this.setLocationRelativeTo(null);
        
        textField1 = new JTextField();
        textField2 = new JTextField();
        
        
        
        next = new JButton("Next");
        next.addActionListener(new ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
            	
            }
        });
        
        back = new JButton("Back");
        back.addActionListener(new ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
            	
            }
        });
        
        
        aendern = new JButton("edit");
        aendern.addActionListener(new ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
            	
            }
        });
        
        
        loeschen = new JButton("delete");
        loeschen.addActionListener(new ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
            	
            }
        });
        
        
        this.getContentPane().add(textField1);
        this.getContentPane().add(textField2);
        //this.getContentPane().add(transferButton);
        this.getContentPane().add(back);
        this.getContentPane().add(next);
        this.getContentPane().add(aendern);
        this.getContentPane().add(loeschen);
    }
 
    public static void main(String[] args) {
        new VermieterAnzeigen().setVisible(true);
    }
}
```


----------



## Verjigorm (4. Sep 2009)

Mach dir eine Klasse "Person", die alle Werte beinhaltet, die du abbilden möchtest.
Dann machst du eine ArrayList<Person>
Darin speicherst du alle Personen.
Die kannst du dann immer verändern/löschen/speichern

Du willst z.B. die 3. Person anzeigen ("list" ist die oben genannte ArrayList):

```
Person p = list.get(2);
textfeldVorname.setText(person.getVorname());
textfeldSonstwas.setText(person.getIrgendwas());
```


----------



## ARadauer (4. Sep 2009)

> Diese Daten enthalten Namen und Adressen von Personen. In dem Arraylist sind jetzt alle Daten zusammen hängend. Jetzt möchte ich mir die Daten im Textfeld anzeigen lassen, aber immer nur von einer person, und das möchte ich so haben das man einfach durchblättern kann. Aber die Daten haben immer eine feste Position, d.h. Daten Person1 :1 -5 Position Person 2 : 6-10 usw..


ich würde auf jeden fall im ersten Schritt mal versuchen die Daten in eine ArrayList mit Personen umzuwandeln...


----------



## maxth (4. Sep 2009)

Das ist meine Klasse die die Daten in einer Arraylist speichert, am liebsten würde das löschen ändern usw. über einen Controller abhandeln. Mir geht es jetzt darum, wie ich zum Beispiel beim klicken auf den "next" Button immer zwischen den ?!Personen bzw. Vermietern hin und her wechseln. Ich hoffe das habt ihr gemeint.


```
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
 

 
public class Vermieter {
    
    String s;
    ArrayList VermieterListe = new ArrayList();

    Verbindung vb = new Verbindung();
    
  

    
    public Vermieter() {
        
        vb.verbinden();
       
            	 
             s = "SELECT * FROM vermieter";
             
             ResultSet r =  vb.execSql(s);
             
             try {
				while(r.next()) {
				  // System.out.println("ID : " + r.getString(1));
					
					 
					//VermieterListe.add(z + ". Wohnung"); 
					
				   VermieterListe.add(r.getString(1) + ". Wohnung"); //ID
				   
				   VermieterListe.add(r.getString(2)); //Name
				 
				 }
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
               
               System.out.println(VermieterListe);
              
            
        
  
       
    }
 
    
}
```


----------



## maxth (4. Sep 2009)

So sieht der Inhalt von meiner Arraylist aus. 


[1. Wohnung, Peter Müller, 2. Wohnung, Oskar Schmidt]

Jetzt möchte ich das so angezeigt bekommen.

Textfelder [ 1. Wohnung] [Peter Müller]

Buttons    [zurück] [weiter]

wenn man weiter klickt zeigt er mir dann die werte der 2. Wohnung. und zurück halt wieder die werte der ersten Wohnung. 

Ist das prinzipiell möglich mit einer Array list


----------



## Michael... (4. Sep 2009)

maxth hat gesagt.:


> Ist das prinzipiell möglich mit einer Array list


Prinzipiell schon. Ich würde aber Wohnungsbezeichnung und Mieter in ein Objekt zu sammen fassen und dann diese Objekte in die Liste stecken.


----------



## maxth (4. Sep 2009)

okay, kannst du mir mal ein Beispiel geben!?

also nehme ich mir einen String Wohnung1 fasse alle Inhalte davon zusammen. Und dann stecke ich diese in ein Arraylist?


----------



## Michael... (4. Sep 2009)

z.B. nimmst Du einen Klasse Wohnung

```
class Wohnung {
	private String name;
	private String mieter;
	
	public Wohnung(String name, String mieterName) {
		this.name = name;
		this.mieter = mieterName;
	}
	
	public String getName() {
		return name;
	}
	
	public String getMieterName() {
		return mieter;
	}
}
```

legst Dir dann die entsprechenden Wohnungen in eine Liste

```
ArrayList<Wohnung> list = new ArrayList<Wohnung>();
list.add(new Wohnung("Wohnung Nr. 14", "Hans Meier"));
list.add(new Wohnung("Wohnung Nr. 201", "Peter Lustig"));
list.add(new Wohnung("Wohnung Nr. 35", "Anne Musterfrau"));
```
und per Buttons navigierst Du dann z.B. mit folgender Methode durch die Liste

```
private int counter;
public void showNext() {
	counter++;
	if (counter>=list.size()) counter = 0;
	textField1.setText(list.get(counter).getName());
	textField2.setText(list.get(counter).getMieterName());
}
```


----------



## maxth (4. Sep 2009)

Danke schön, ich hab die ganze zeit in die falsche Richtung gedacht.


----------



## ARadauer (4. Sep 2009)

sowas ist ganz böse


```
VermieterListe.add(r.getString(1) + ". Wohnung"); //ID
                   
                   VermieterListe.add(r.getString(2)); //Name
```
da du hier einfach die Information, was dieser Wert genau ist (zb der Name), einfach wegwirfst..
Wie Michael schon gezeigt hat, ein schönes Objekt bauen und dieses dann weiterverwenden... ganz bequem und einfach


----------



## maxth (4. Sep 2009)

Ich hole mir die Daten aus der Datenbank. 


```
while(r.next()) {
				  // System.out.println("ID : " + r.getString(1));
					
					
					
list.add(new Wohnung("Wohnung: " + r.getString(1), "Name: " + r.getString(2)));
```

ist da ein Fehler drin?


----------



## maxth (4. Sep 2009)

so...ich hab es mal probiert wie es Michael geschrieben hat. 

Aber es funktioniert noch nicht.


Wohnung 


```
public class Wohnung {
	static Verbindung vb = new Verbindung();
	
    private String name;
    private String mieter;
    
    
    public Wohnung(String name, String mieterName) {
        
    	this.name = name;
        this.mieter = mieterName;
    }
    
    public String getName() {
        return name;
    }
    
    public String getMieterName() {
        return mieter;
    }
    
   

}
```

Und die Klasse WohnungErsteller


```
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
 

 
public class WohnungErsteller extends Wohnung  {
    
    String s;
   

    ArrayList<Wohnung> list = new ArrayList<Wohnung>();

    Verbindung vb = new Verbindung();
    
  
    
    public WohnungErsteller() {
        
        vb.verbinden();
       
            	 
             s = "SELECT * FROM vermieter";
             
             ResultSet r =  vb.execSql(s);
             
             try {
				while(r.next()) {
				  
					
					list.add(new Wohnung("Wohnung: " + r.getString(1), "Name: " + r.getString(2)));
					
				
				 }
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
               
           
            
        
    }
```


----------



## Michael... (4. Sep 2009)

maxth hat gesagt.:


> Aber es funktioniert noch nicht.


...und was funktioniert nicht?? Einen Fehler im Code finde ich nicht.


----------



## maxth (4. Sep 2009)

ohh entschuldigung da fehlt der entscheidende satz. 

Er hat Probleme beim WohnungsErsteller mit dem Kontruktor.


```
[COLOR="Red"]public WohnungErsteller() {[/COLOR] // Hier wird der Fehler angezeigt. Wohnung() is undefinded, must explicity invoke another contructor
        
        vb.verbinden();
       
            	 
             s = "SELECT * FROM vermieter";
             
             ResultSet r =  vb.execSql(s);
             
             try {
				while(r.next()) {
				  
					
					list.add(new Wohnung("Wohnung: " + r.getString(1), "Name: " + r.getString(2)));
					
				
				 }
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
               
           
            
        
    }
```


----------



## Michael... (4. Sep 2009)

Oh, hab ich ganz übersehen:
Warum erbt den die Klasse WohnungsErsteller von Wohnung????


----------



## maxth (4. Sep 2009)

ergibt ja eigentlich wenig sinn.

muss ich beide KLassen nicht noch erst bekannt machen, und wie stelle ich die Verbinung mit meiner anzeige KLasse her.?


----------



## Michael... (4. Sep 2009)

maxth hat gesagt.:


> muss ich beide KLassen nicht noch erst bekannt machen


???? Wenn sie im selben Package liegen kennen die sich schon, ansonsten musst Du das über einen import ......Wohnung; machen.


maxth hat gesagt.:


> wie stelle ich die Verbinung mit meiner anzeige KLasse her.?


Entweder Du hast eine Klasse die das Objekt der Anzeigeklasse und das Objekt Datenklasse besitzt, oder die anzeigende Klasse selbst besitzt ein Objekt der Daten


----------



## maxth (7. Sep 2009)

Wenn ich die Arraylist ausgeben möchte, bekomme ich leere Klammern.

Hier ist noch mal mein kompletter Code. 

Wohnung Ersteller


```
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
 

 
public class WohnungErsteller   {
    
    String s;
   

    ArrayList<Wohnung> list = new ArrayList<Wohnung>();

    Verbindung vb = new Verbindung();
    
  
    
    public WohnungErsteller() {
        
        vb.verbinden();
       
            	 
             s = "SELECT * FROM vermieter";
             
             ResultSet r =  vb.execSql(s);
             
             try {
				while(r.next()) {
				  
					
					list.add(new Wohnung("Wohnung: " + r.getString(1), "Name: " + r.getString(2)));
			System.out.println(list);
			
				
				 }
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
               
                
    }
 
    
}
```


Meine Wohnung Klasse


```
public class Wohnung {
	static Verbindung vb = new Verbindung();
	
    private String name;
    private String mieter;
    
    
    public Wohnung(String name, String mieterName) {
        
    	this.name = name;
        this.mieter = mieterName;
    }
    
    public String getName() {
        return name;
    }
    
    public String getMieterName() {
        return mieter;
    }
    
   

}
```


meine WohnungAnzeige Klasse


```
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
 
import javax.swing.*;
 
public class WohnungAnzeigen extends JFrame {
    
    Vermieter vermieter = new Vermieter(); //Klasse der Arraylist
    ArrayList<Wohnung> list = new ArrayList<Wohnung>();

    
    
	
    private JTextField textField1;
    private JTextField textField2;
    
    
    private JButton next;
    private JButton back;
    private JButton loeschen;
    private JButton aendern;
    
    
    public WohnungAnzeigen() {
    	super("Anzeige");
        this.setLayout(new GridLayout(3, 1));
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setBounds(0, 0, 300, 200);
        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        this.setLocationRelativeTo(null);
        
        textField1 = new JTextField();
        textField2 = new JTextField();
        
        
        
        next = new JButton("Next");
        next.addActionListener(new ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
            	
            	int counter = 0;
            	//public void showNext() {
            	    counter++;
            	    if (counter>=list.size()) counter = 0;
            	    textField1.setText(list.get(counter).getName());
            	    textField2.setText(list.get(counter).getMieterName());
            	
            	
            }
        });
        
        back = new JButton("Back");
        back.addActionListener(new ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
            	
            }
        });
        
        
        aendern = new JButton("edit");
        aendern.addActionListener(new ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
            	
            }
        });
        
        
        loeschen = new JButton("delete");
        loeschen.addActionListener(new ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
            	
            }
        });
        
        
        this.getContentPane().add(textField1);
        this.getContentPane().add(textField2);
        //this.getContentPane().add(transferButton);
        this.getContentPane().add(back);
        this.getContentPane().add(next);
        this.getContentPane().add(aendern);
        this.getContentPane().add(loeschen);
    }
 
    public static void main(String[] args) {
        new WohnungAnzeigen().setVisible(true);
    }
}
```


----------



## maxth (7. Sep 2009)

Sind jetzt keine Fehler mehr drin, und funktioniert wunderbar


----------

