# Liste aktualisieren oder GUI schließen? HILFE *verzweifelt*



## Java-Neuling-2 (21. Jun 2006)

Hallo Leute,

ich bastel nun schon irre lange an einer Oberfläche mit einer Liste herum...
In die Liste werden Objekte aus einer DB geladen und ich kann sie bearbeiten, löschen und ansehen.

Wenn ich nun ein Objekt lösche, muss es ja auch sofort aus der liste verschwinden...
Mir würde es auch völlig genügen, wenn bei aufruf einer Fkt. löschen / bearbeiten die GUI mit der Liste verschwindet (setVisible(false); )!!

Ich bekomme aber leider keins vom beiden hin :-(

Habt ihr vielleicht einen Tip wie ich diesen Code umbauen kann damit ich die GUI (Buecherliste) ausblenden oder die Liste (ListDemoBuch) aktualisieren kann???


```
package GUI;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.*;

import Fachklassen.BuecherVerwaltung;
import Fachklassen.Buch;

class ListDemoBuch extends JPanel
{
    private JList list;
    private DefaultListModel listModel;
    
    private JFrame parent;
    
   	private JButton bt_bearbeiten;
	private JButton bt_loeschen;
	private JButton bt_details;
	
	private Buch[] tabelle; //enthält alle Bücher als Array

    public ListDemoBuch(JFrame parent, Buecherliste test)
    {
        super(new BorderLayout());

    	this.parent = parent;
				
        listModel = new DefaultListModel();
        
		fuelleList();  //Das ListModel wird mit Objelten aus der DB gefüllt

        //Create the list and put it in a scroll pane.
        list = new JList(listModel);
        list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        list.setSelectedIndex(0);
        list.setVisibleRowCount(7);
        JScrollPane listScrollPane = new JScrollPane(list);
        
        //Create a panel that uses BoxLayout.
        JPanel buttonPane = new JPanel();
        buttonPane.setLayout(new BoxLayout(buttonPane,BoxLayout.LINE_AXIS));

        buttonPane.add(Box.createHorizontalStrut(5));
        buttonPane.add(new JSeparator(SwingConstants.VERTICAL));
        buttonPane.add(Box.createHorizontalStrut(5));
        buttonPane.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));

        add(listScrollPane, BorderLayout.CENTER);
        add(buttonPane, BorderLayout.PAGE_END);
        
        //Buttons
        bt_bearbeiten = new JButton();
   		bt_bearbeiten.setText("bearbeiten");
		
        bt_loeschen = new JButton();
   		bt_loeschen.setText("löschen");
 
        bt_details = new JButton();
   		bt_details.setText("Details anzeigen");
        
        //hinzufügen
        buttonPane.add(bt_bearbeiten);
        buttonPane.add(bt_loeschen);
        buttonPane.add(bt_details);
        
        //actions
   		bt_bearbeiten.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent ae) { bearbeitenBuch(); } });
   		bt_loeschen.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent ae) { loeschenBuch(); } });
   		bt_details.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent ae) { detailsBuch(); } });
   		
   		
    }
    
    //Aufruf der Oberfläche zum bearbeiten
    private void bearbeitenBuch()
    {
   		int zeile;
	    if((zeile = list.getSelectedIndex()) != -1) 
		{
	      //(new BuchErfassung(parent, (Buch)tabelle[zeile])).setVisible(true);
	      System.out.println(list.getSelectedIndex() + "bearbeiten");
	      (new Buecherdetails(parent, tabelle[zeile], "Bearbeiten")).setVisible(true);
	    }
    }

    //Aufruf der Oberfläche zum löschen
    private void loeschenBuch()
    {
   		int zeile;
	    if((zeile = list.getSelectedIndex()) != -1) 
		{
	    	System.out.println(list.getSelectedIndex() + "loeschen");
			(new BuchLoeschen(parent, tabelle[zeile])).setVisible(true);	    
		}
		
		
    }

    //Aufruf der Oberfläche zum anzeigen der Details
    private void detailsBuch()
    {
   		int zeile;
	    if((zeile = list.getSelectedIndex()) != -1) 
		{
	      //(new BuchErfassung(parent, (Buch)tabelle[zeile])).setVisible(true);
	      System.out.println(list.getSelectedIndex() + "details");
	      (new Buecherdetails(parent, tabelle[zeile], "Details")).setVisible(true);
	    }
    }
    
    //Füllt die Liste mit Inhalten
    private void fuelleList()
    {
		Vector listenInhalt = new Vector();
		tabelle = BuecherVerwaltung.getAll();
		
		for(int i = 0; i < tabelle.length; i++)
		{
			listModel.addElement(tabelle[i].getTitel() +"          " + tabelle[i].getAutoren() + "        " + tabelle[i].getErstellt());
		}	
  	}    
}

public class Buecherliste extends JDialog
{	
    private JList list;
    private DefaultListModel listModel;
    private JComponent newContentPane;
    
	public Buecherliste(JFrame parent, String parameter)
	{
		super(parent);

		this.getContentPane().setLayout(null);
	    this.setTitle(parameter);
	    this.setBackground(SystemColor.activeCaptionBorder);
	    this.setSize(500,200);
	    setDefaultCloseOperation(HIDE_ON_CLOSE);

        newContentPane = new ListDemoBuch(parent, this);
        newContentPane.setBounds(20,20,300,200);
        this.setContentPane(newContentPane);        
	}
}
```


----------



## foobar (21. Jun 2006)

Auch für dich gilt erstmal Doku lesen dann posten.  http://www.java-forum.org/de/viewtopic.php?t=9267

Du mußt ein ListModel implementieren und dann über den selektierten Index aus der Jlist das Element löschen:


```
myList = new Jlist(new MyListModel());
...

class MyListModel implements ListModel
{

  // ListModel implementieren


  public void removeElementAt(int index)
  {
     data.remove(index);
     fireListDataChanged();
  }
```

Der Button ruft dann einfach die Methode removeElement auf:

```
((MyListModel)myList.getModel()).removeElementAt(myLIst.getSelectedIndex());
```


----------



## Beni (22. Jun 2006)

Es gibt übrigens ein DefaultListModel, welches dir sehr viel Arbeit abnehmen kann. Das DefaultListModel verhält sich so, als wäre es eine Liste (und hat entsprechend Methoden um Dinge hinzuzufügen, oder zu entfernen).


----------

