# Aktualisierung einer JList



## Blagg Dogg (29. Feb 2012)

hi, 

kann mir bitte wer helfen? es geht um ein adressbuch, und zwar möchte ich, dass die jlist im update aktualisiert wird bzw. die daten neu geladen werden. 


```
package main;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.Observable;
import java.util.Observer;

import javax.swing.*;

import data.*;

import utilities.*;


public class MainBook implements Observer {
	WriteData write;
	JFrame main;
	JPanel north, center, south;
	//JList list;
	JList list;
	
	
	ArrayList<Adresse> adressen = null;

	public MainBook(WriteData w){
		write = w;
	}
	
	public JFrame create(String name){
		main = new JFrame();
		main.setTitle(name);
		main.setSize(500, 600);
		main.setLocationRelativeTo(null);
		//setDefaultCloseOperation(EXIT_ON_CLOSE);


		main.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
	      
	    main.addWindowListener(new WindowAdapter() {
	       public void windowClosing(WindowEvent e) {
	          exit();
	       }
	    });
		
		main.add(buildNorth(), BorderLayout.NORTH);
		main.add(buildCenter(), BorderLayout.CENTER);
		main.add(buildSouth(), BorderLayout.SOUTH);
		return main;
		
		
		
	}
	
	
	private JPanel buildNorth(){
		north = new JPanel(new FlowLayout(FlowLayout.CENTER));
		north.setBorder(BorderFactory.createTitledBorder("Neue Kontakte hinzufügen"));
		
		JButton kontakt = new JButton("Neuen Kontakt anlegen");
		kontakt.setToolTipText("Lege einen neuen Kontakt an");
		
		kontakt.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				AdressEingabe a= new AdressEingabe(write);
				a.create().setVisible(true);
				
			}
		});		
		
		/*
		JButton gruppe = new JButton("Neue Gruppe anlegen");
		
		gruppe.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				new NeueGruppe().setVisible(true);
				
			}
		});
		*/
		north.add(kontakt);
	
		
		
		return north;
	}

	private JPanel buildCenter(){
		center = new JPanel(new BorderLayout());
		
		adressen=new ReadData().deserealize();

		
		center.setBorder(BorderFactory.createTitledBorder("Meine Kontakte"));
		
		list = new JList(adressen.toArray());
		
		center.add(list);
		

		JButton details = new JButton("Details");
		details.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				if (list.getSelectedIndex()==-1) new MyMsg("Bitte erst Namen wählen").setVisible(true);
				else new ShowAdress((Adresse) adressen.toArray()[list.getSelectedIndex()]).setVisible(true);
				
			}
		});
		
		JButton delete = new JButton("Kontakt entfernen");
		delete.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				if (list.getSelectedIndex()==-1) new MyMsg("Bitte erst Namen wählen").setVisible(true);
				else write.removeFromList((Adresse)adressen.toArray()[list.getSelectedIndex()]);
			}
		});
		
		JPanel button = new JPanel(new FlowLayout(FlowLayout.CENTER));
		button.add(details);
		button.add(delete);
		center.add(button, BorderLayout.SOUTH);

		
		return center;
	}
	
	private JPanel buildSouth(){
		south = new JPanel(new FlowLayout());
		south.setBorder(BorderFactory.createTitledBorder("Optionen"));
		
		JButton pass = new JButton("Speichern");
		
		south.add(pass);
		
		JButton about = new JButton("Über Adressbuch");
		south.add(about);
		
		about.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				new About("Adressbuch").setVisible(true);
				
			}
		});
		
		JButton close = new JButton("Schließen");
		south.add(close);
		close.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				exit();
				
			}
		});
		
		return south;
	}
	
	
	public void saveData(){
		// save
	}
	
	   private void exit() {
		      int result = JOptionPane.showConfirmDialog(null,
		      "Möchten Sie das Programm beenden?",
		      "Programm beenden",
		      JOptionPane.YES_NO_OPTION);

		      switch(result) {
		         case JOptionPane.YES_OPTION:
		         System.exit(0);

		         case JOptionPane.NO_OPTION:
		         //vielleicht ist hier was zu tun
		      }
		   }

	@Override
	public void update(Observable arg0, Object arg1) {
		System.out.println("--------------------Updated !!!----------------------");
		// Liste aktualisieren
		ArrayList<Adresse> result = new ReadData().deserealize();
		list=null;
		list = new JList(result.toArray()); //klappt nicht - wird nicht neu initialisiert
		
		
		//zum Testen - klappt: result beinhaltet die richtigen Daten
		/*
		for(Adresse aa: result){
			System.out.println(aa.toString());
		}
		*/
		
		
		
	}
}
```


----------



## Marc T. (29. Feb 2012)

Vielleicht hilft dir das?


```
public void updateList(JList list, ArrayList objs) {
    DefaultListModel listModel = (DefaultListModel)list.getModel();
    listModel.clear();
    
    for(int i=0; i<objs.size(); i++) {
        listModel.addElement((String)objs.get(i));
    }
}
```

Edit:

Oder mal das durchlesen 

http://www.java-forum.org/java-basics-anfaenger-themen/71217-jlist-updaten.html


----------



## Blagg Dogg (29. Feb 2012)

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JList$1 cannot be cast to javax.swing.DefaultListModel

kann das irgendwie nicht casten...


----------



## Gast2 (29. Feb 2012)

Dann castest du falsch. Du musst das Model casten und nicht deine JList.


----------



## Blagg Dogg (29. Feb 2012)

hä?^^


----------



## freak_007 (29. Feb 2012)

Dein Code sieht wahrscheinlich so aus:

```
DefaultListModel listModel = (DefaultListModel) list;
```
schreib es so um

```
DefaultListModel listModel = (DefaultListModel) list.getModel();
```
Falls es nicht geht, poste uns ein neuen Code.
Gruß,
Freak


----------

