# JList aktualisieren



## Negr0 (28. Mrz 2005)

Hallo,

ich habe eine JList in der ich den Ihalt eines Ordners auflisten lasse, den Pfad hab ich in einer Variable gespeichert und jetzt will ich via Button click den Pfad in der Variable aendern, so weit so gut, dass ist auch alles kein Problem aber die aenderung wird nicht in der JLIst angezeigt, sie zeigt mir nach wie vor den gleichen Inhalt an, jetzt gehe ich davon aus das ich das Teil irgend wie aktualisieren muss, wie mache ich das?

Das hier ist der Source dazu:


```
import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.border.*;

import java.io.File;





public class Fenster extends Frame

{



  //Objekte erzeugen

  //Main

  //Labels

  JLabel lblHeader = new JLabel();

  JLabel lblSubHeader1 = new JLabel();

  JLabel lblSubHeader2 = new JLabel();

  //Liste

  //Alle Dateien in Ordner anzeigen

  File langDir = new File(".\\Klassen");

  String[] languageFiles = langDir.list();

  JList lstKLasse = new JList(langDir.list());

  

  String strSchuelerF = ".\\Schueler";

  File langDir2 = new File(strSchuelerF);

  String[] languageFiles2 = langDir2.list();

  JList lstSchueler = new JList(langDir2.list());

  //Buttons

  JButton bndNewKlasse = new JButton();

  JButton bndDelKlasse = new JButton();

  JButton bndEditKlasse = new JButton();

  JButton bndNC = new JButton();

  JButton bndSelectKl = new JButton();

  JButton bndDelSchueler = new JButton();

  JButton bndEditSchueler = new JButton();

  JButton bndNote = new JButton();

  JButton bndSelectSch = new JButton();



  //Add Schueler

  //Panel

  JPanel pnlAddSch = new JPanel();

  //Labels

  JLabel lblSubHeader3 = new JLabel();

  JLabel lblAddVorname = new JLabel();

  JLabel lblAddNachname = new JLabel();

  JLabel lblAddPkt = new JLabel();

  //TextFields

  TextField txtAddVorname = new TextField();

  TextField txtAddNachname = new TextField();

  TextField txtAddPkt = new TextField();

  //Buttons

  JButton bndAddAdd = new JButton();



  //Edit Schueler

  //Panel

  JPanel pnlEditSch = new JPanel();

  TitledBorder titledBorder1;

  //Labels

  JLabel lblSubHeader4 = new JLabel();

  JLabel lblEditVorname = new JLabel();

  JLabel lblEditNachname = new JLabel();

  JLabel lblEditPkt = new JLabel();

  //TextFields

  TextField txtEditVorname = new TextField();

  TextField txtEditNachname = new TextField();

  TextField txtEditPkt = new TextField();

  //Buttons

  JButton bndEditUpt = new JButton();



  public Fenster()

  {

    super("FOSp12d");



    this.setSize(450,500);

    this.setLayout(null);

    this.show();



    try

    {

      jbInit();

    }

    catch(Exception e)

    {

      //e.printStackTrace();

    }

  }



  private void jbInit() throws Exception

{

    titledBorder1 = new TitledBorder("");

    lblHeader.setFont(new java.awt.Font("Dialog", 0, 25));

    lblHeader.setText("NC Calc");

    lblHeader.setBounds(new Rectangle(174, 22, 105, 44));

    this.setFocusable(false);

    this.setResizable(false);

    lstKLasse.setBackground(SystemColor.desktop);

    lstKLasse.setAutoscrolls(true);

    lstKLasse.setDebugGraphicsOptions(0);

    lstKLasse.setRequestFocusEnabled(true);

    lstKLasse.setToolTipText("");

    lstKLasse.setPrototypeCellValue(null);

    lstKLasse.setBounds(new Rectangle(11, 93, 110, 140));

    lblSubHeader1.setText("Waehlen Sie eine Klasse...");

    lblSubHeader1.setBounds(new Rectangle(13, 67, 195, 29));

    lstSchueler.setBackground(SystemColor.desktop);

    lstSchueler.setBounds(new Rectangle(215, 93, 125, 141));

    lblSubHeader2.setText("Waehlen Sie einen Schueler...");

    lblSubHeader2.setBounds(new Rectangle(214, 70, 186, 23));

    bndSelectSch.setText("Select");

    bndSelectSch.setBounds(new Rectangle(214, 239, 127, 37));

    bndDelSchueler.setBounds(new Rectangle(345, 95, 90, 32));

    bndDelSchueler.setText("Delete");

    bndEditSchueler.setText("Edit");

    bndEditSchueler.setBounds(new Rectangle(345, 135, 90, 32));

    bndDelKlasse.setText("Delete");

    bndDelKlasse.setBounds(new Rectangle(123, 128, 90, 32));

    bndEditKlasse.setBounds(new Rectangle(123, 162, 90, 32));

    bndEditKlasse.setText("Edit");

    pnlAddSch.setBorder(titledBorder1);

    pnlAddSch.setDebugGraphicsOptions(DebugGraphics.LOG_OPTION);

    pnlAddSch.setRequestFocusEnabled(false);

    pnlAddSch.setToolTipText("");

    pnlAddSch.setVerifyInputWhenFocusTarget(true);

    pnlAddSch.setActionMap(null);

    pnlAddSch.setLayout(null);

    pnlAddSch.setBounds(new Rectangle(4, 302, 215, 172));

    lblSubHeader3.setFont(new java.awt.Font("Dialog", 1, 15));

    lblSubHeader3.setForeground(Color.black);

    lblSubHeader3.setText("Add Schueler");

    lblSubHeader3.setBounds(new Rectangle(58, 1, 103, 36));

    lblAddVorname.setText("Vorname:");

    lblAddVorname.setBounds(new Rectangle(6, 31, 61, 33));

    lblAddNachname.setBounds(new Rectangle(6, 59, 71, 33));

    lblAddNachname.setText("Nachname:");

    lblAddPkt.setText("Punkte:");

    lblAddPkt.setBounds(new Rectangle(6, 86, 71, 33));

    txtAddVorname.setText("");

    txtAddVorname.setBounds(new Rectangle(79, 37, 106, 23));

    txtAddNachname.setText("");

    txtAddNachname.setBounds(new Rectangle(79, 64, 106, 23));

    txtAddPkt.setText("");

    txtAddPkt.setBounds(new Rectangle(80, 92, 106, 23));

    lblSubHeader4.setBounds(new Rectangle(58, 1, 103, 36));

    lblSubHeader4.setText("Edit Schueler");

    lblSubHeader4.setForeground(Color.black);

    lblSubHeader4.setFont(new java.awt.Font("Dialog", 1, 15));

    txtEditNachname.setText("");

    txtEditNachname.setBounds(new Rectangle(79, 64, 106, 23));

    pnlEditSch.setBounds(new Rectangle(224, 302, 215, 172));

    pnlEditSch.setLayout(null);

    pnlEditSch.setActionMap(null);

    pnlEditSch.setVerifyInputWhenFocusTarget(true);

    pnlEditSch.setToolTipText("");

    pnlEditSch.setRequestFocusEnabled(false);

    pnlEditSch.setDebugGraphicsOptions(DebugGraphics.LOG_OPTION);

    pnlEditSch.setBorder(titledBorder1);

    txtEditPkt.setBounds(new Rectangle(80, 92, 106, 23));

    lblEditNachname.setBounds(new Rectangle(6, 59, 71, 33));

    lblEditNachname.setText("Nachname:");

    lblEditPkt.setText("Punkte:");

    lblEditPkt.setBounds(new Rectangle(6, 86, 71, 33));

    txtEditVorname.setText("");

    txtEditVorname.setBounds(new Rectangle(79, 37, 106, 23));

    lblEditVorname.setText("Vorname:");

    lblEditVorname.setBounds(new Rectangle(6, 31, 61, 33));

    bndAddAdd.setBounds(new Rectangle(50, 126, 102, 31));

    bndAddAdd.setActionCommand("");

    bndAddAdd.setText("Add");

    bndEditUpt.setText("Update");

    bndEditUpt.setBounds(new Rectangle(48, 125, 102, 31));

    bndEditUpt.setActionCommand("");

    bndNote.setBounds(new Rectangle(344, 174, 90, 32));

    bndNote.setText("Note");

    bndNC.setText("NC");

    bndNC.setBounds(new Rectangle(123, 196, 90, 32));

    bndNewKlasse.setBounds(new Rectangle(124, 93, 90, 32));

    bndNewKlasse.setText("New");

    bndNewKlasse.addMouseListener(new Fenster_bndNewKlasse_mouseAdapter(this));

    bndSelectKl.setBounds(new Rectangle(11, 239, 112, 37));

    bndSelectKl.setText("Select");

    bndSelectKl.addMouseListener(new Fenster_bndSelectKl_mouseAdapter(this));

    this.add(lblSubHeader1, null);

    this.add(lblHeader, null);

    this.add(bndDelSchueler, null);

    this.add(lstSchueler, null);

    this.add(bndSelectSch, null);

    this.add(pnlAddSch, null);

    pnlAddSch.add(lblAddVorname, null);

    pnlAddSch.add(lblAddNachname, null);

    pnlAddSch.add(lblAddPkt, null);

    pnlAddSch.add(txtAddVorname, null);

    pnlAddSch.add(txtAddNachname, null);

    pnlAddSch.add(txtAddPkt, null);

    pnlAddSch.add(lblSubHeader3, null);

    pnlAddSch.add(bndAddAdd, null);

    this.add(pnlEditSch, null);

    pnlEditSch.add(lblEditVorname, null);

    pnlEditSch.add(lblEditNachname, null);

    pnlEditSch.add(lblEditPkt, null);

    pnlEditSch.add(txtEditVorname, null);

    pnlEditSch.add(txtEditNachname, null);

    pnlEditSch.add(txtEditPkt, null);

    pnlEditSch.add(lblSubHeader4, null);

    pnlEditSch.add(bndEditUpt, null);

    this.add(bndEditSchueler, null);

    this.add(bndNote, null);

    //Button "Neue Klasse erzeugen" anzeigen

    this.add(bndNewKlasse, null);

    this.add(bndDelKlasse, null);

    this.add(bndEditKlasse, null);

    this.add(bndNC, null);

    this.add(lblSubHeader2, null);

    this.add(bndSelectKl, null);

    this.add(lstKLasse, null);



  this.setIgnoreRepaint(false);

  this.setBackground(SystemColor.controlHighlight);

  this.setLayout(null);

}



//Button event fuer "neue Klasse anlegen" ####################################

void bndNewKlasse_mouseClicked(MouseEvent e)

{

  //Wird bei Clicken ausgefuehrt

  NeueKlasse NK = new NeueKlasse();

}

//############################################################################



//Button event fuer "Klasse select" ##########################################

  void bndSelectKl_mouseClicked(MouseEvent e)

  {

    String strTest = (String) lstKLasse.getSelectedValue();



    System.out.println(strTest);

    strSchuelerF = "c:\\";

  }

//############################################################################



}



//Java class fuer "Neue Klasse anlegen" ######################################

class Fenster_bndNewKlasse_mouseAdapter extends java.awt.event.MouseAdapter

{

  Fenster adaptee;



  Fenster_bndNewKlasse_mouseAdapter(Fenster adaptee)

  {

    this.adaptee = adaptee;

  }

  public void mouseClicked(MouseEvent e)

  {

    adaptee.bndNewKlasse_mouseClicked(e);

  }

}

//############################################################################



//Java class fuer "Klasse select" ############################################

class Fenster_bndSelectKl_mouseAdapter extends java.awt.event.MouseAdapter

{

  Fenster adaptee;



  Fenster_bndSelectKl_mouseAdapter(Fenster adaptee)

  {

    this.adaptee = adaptee;

  }

  public void mouseClicked(MouseEvent e)

  {

    adaptee.bndSelectKl_mouseClicked(e);

  }

}

//############################################################################
```

Die angesprochene Varible in der ich den Pfad hinterlege ist: "strSchuelerF"
Die angesprochene JList in der dann der Inhalt angezeigt wird ist: "lstKLasse"
Und der Button mit dem das ganze dann bewirgt werden soll ist: "bndSelectKl"


----------



## mic_checker (28. Mrz 2005)

Wenn du nachträglich noch einfügen,entfernen etc. willst kannst du z.B. das DefaultListModel() verwenden. 

Diesem kannst du die einzelnen Elemente der Liste mit addElement hinzufügen und der Liste übergibst du im Konstruktor dieses Model.

Später kannst du immer noch (nachträglich) hinzufügen etc. Guck mal im Sun Tutorial findest du auch Sources dazu, ansonsten kannst ja hier noch posten.


----------



## Negr0 (28. Mrz 2005)

Naja, ich will ja in dem Sinne nix hinzufuegen, will nur das der Inhalt aktualisiert wird.


----------



## mic_checker (28. Mrz 2005)

Ich würde es zumindest über das DefaultListModel machen, vielleicht   auch nur weil ich in letzter Zeit öfter damit konfrontiert werde 

Zu JList gibts hier auch noch nen Thread:
http://www.java-forum.org/de/viewtopic.php?t=15436

Im besagten findest du auf Seite 2 auch (sehr wenig) Code...

Bei Fragen dazu,poste einfach.


----------



## Negr0 (28. Mrz 2005)

Ich hab das ganze jetzt mal mit  DefaultListModel versucht, das hier ist da bei raus gekommen:


```
//Button event fuer "Klasse select" ##########################################

  void bndSelectKl_mouseClicked(MouseEvent e)

  {

    String strTest = (String) lstKLasse.getSelectedValue();



    System.out.println(strTest);

    strSchuelerF = "c:\\";

    System.out.println(strSchuelerF);

    

    DefaultListModel dlm = new DefaultListModel();

    File langDir2 = new File(strSchuelerF);

    languageFiles2 = langDir2.list();

    dlm.addElement(langDir2.list());

    lstSchueler = new JList(langDir2.list()); 

  }

//############################################################################
```

Bekomme bei beim Kombilieren bzw. Java Optimieren ^^, keine Fehlermeldung, klappen tuts aber auch nicht, haste vielleicht noch ne Idee wo ran es liegt?


----------



## mic_checker (28. Mrz 2005)

```
lstSchueler = new JList(langDir2.list());
```

Du musst dem Konstruktor in dem Fall schon das entsprechende Model übergeben:


```
lstSchueler = new JList(dlm);
```

Vorher kannst du die einzelnen Elemente z.B: so hinzufügen:


```
String files[] = new File(".").list();
		for(int i = 0;i < files.length;i++)
			listModel.addElement(files[i]);
```

Bei einem neuen Verzeichnis dann den bisherigen Inhalt des Models löschen und das ganze nochmal von vorne..


----------



## Wildcard (28. Mrz 2005)

Du machst das auch falsch!


```
void bndSelectKl_mouseClicked(MouseEvent e) 

  { 

    String strTest = (String) lstKLasse.getSelectedValue(); 



    System.out.println(strTest); 

    strSchuelerF = "c:\\"; 

    System.out.println(strSchuelerF); 

    

    DefaultListModel dlm = new DefaultListModel(); 

    File langDir2 = new File(strSchuelerF); 

    //languageFiles2 = langDir2.list();   was ist denn das???

    dlm.addElement(langDir2.list()); 

    lstSchueler = new JList(dlm);  //ab jetzt musst du alle Veränderungen nur noch über das ListModel machen

  }
```
[edit]2l8  :? [/edit]


----------



## mic_checker (28. Mrz 2005)

Wildcard hat gesagt.:
			
		

> ```
> dlm.addElement(langDir2.list());
> ```


Hi Wildcard,
ich glaub du kannst es so nicht machen, afaik musst du die einzeln (wie oben in Schleife) hinzufügen...oder?


----------



## Wildcard (28. Mrz 2005)

mic_checker hat gesagt.:
			
		

> Hi Wildcard,
> ich glaub du kannst es so nicht machen, afaik musst du die einzeln (wie oben in Schleife) hinzufügen...oder?


Stimmt! hab das ganze von oben übernommen und leider nicht richtig durchgelesen   
Naja, du hast ja die richtige Lösung schon gepostet  :wink:


----------



## Gast (28. Mrz 2005)

??? Was wie wo? ListModel? Schleife? jetzt komm ich nicht mehr mit ^^, was muss ich jetzt wie machen?  Wie meinste das jetzt mit ListModel, wie kann ich darueber weitere Items hinzu fuegen?


----------



## mic_checker (28. Mrz 2005)

> Stimmt! hab das ganze von oben übernommen und leider nicht richtig durchgelesen icon_redface.gif



Der Fehler mit dem addElement(..) ist mir vor einiger Zeit auch passiert, also : nicht weiter schlimm 

Negro..: Les dir einfach meinen Beitrag von oben nochmal durch, am besten schreibst du dir deine eigene Methode der du den Namen des Verzeichnisses übergibst, in dieser könntest du dann folgendes machen:


```
public void liste(String name) {

		listModel.removeAllElements();
		String files[] = new File(name).list();		
		for(int i = 0;i < files.length;i++)
			listModel.addElement(files[i]);
}
```

Diese Methode kannst du anfangs aufrufen um das ursprüngliche Verzeichnis anzeigen zu lassen und nachdem du das neue ausgewählt hast nochmal.


----------



## Guest (28. Mrz 2005)

mic_checker hat gesagt.:
			
		

> > Stimmt! hab das ganze von oben übernommen und leider nicht richtig durchgelesen icon_redface.gif
> 
> 
> 
> ...



Hast du den Code da mal getestet? Bei mir funktioniert das kein stratz ^^, bei removeAllElements gibt er mir ne fehlermeldung...


----------



## mic_checker (28. Mrz 2005)

Poste mal deinen kompletten Code, damit ich sehen kann wie du das ganze aufrufst.

Die genaue Fehlermeldung wäre auch ganz gut.

Selbstverständlich habe ich es schon getestet und es funzt prima


----------



## Negr0 (28. Mrz 2005)

Hier meine fehlermeldungen:

"Liste.java": Symbol kann nicht aufgelöst werden: Variable listModel in Klasse Liste in Zeile 7, Spalte 5
"Liste.java": Symbol kann nicht aufgelöst werden: Variable listModel in Klasse Liste in Zeile 13, Spalte 7


----------



## Negr0 (28. Mrz 2005)

der Source der Klasse ist im grossen und ganzen das gleich wie du mit gepostet hast:


```
import java.io.File;



public class Liste

{ 

  public void liste(String name)

  {

    listModel.removeAllElements();



    String files[] = new File(name).list();



    for(int i = 0;i < files.length;i++)



      listModel.addElement(files[i]);   

  }

}
```


----------



## mic_checker (28. Mrz 2005)

Du musst natürlich gucken das die Variable sichtbar ist für die andern Methoden, deklarierst du die Variable überhaupt irgendwo? Ist vom Typ DefaultListModel.


----------



## Negr0 (28. Mrz 2005)

So, ich hab mich dazu entschieden das ganze doch anders zu machen, will nicht extra fuer den Unsinn noch ne Class anlegen muessen, sind mir so wie so schon zu viele ^^. Hab das ganze jetzt so probiert:


```
//Button event fuer "Klasse select" ##########################################

  void bndSelectKl_mouseClicked(MouseEvent e)

  {

    String strTest = (String) lstKLasse.getSelectedValue();



    System.out.println(strTest);

    strSchuelerF = "c:\\";

    System.out.println(strSchuelerF);

    

    DefaultListModel dlm = new DefaultListModel();

    

    dlm.removeAllElements();

    String files[] = new File(strSchuelerF).list();

    

    for(int i = 0;i < files.length;i++)

    {

      dlm.addElement(files[i]);

      lstSchueler = new JList(dlm);

    }

    

    

  }

//############################################################################
```

Bekomme zwar beim Java-Optimieren keine Fehlermeldungen allerdngs fuegt er mir die teile immer noch nicht  zur JList hinzu. So langsam bin ich am verzweifeln  :autsch:


----------



## Wildcard (28. Mrz 2005)

Du gehst da ganz falsch ran!
Mach das Model zur Klassenvariablen. Übergib es im Konstruktor der JList und füg dann einfach daten in
das Model ein. Dafür brauchst du kein neues Model oder eine neue Jlist zu erzeugen!


----------



## Negr0 (28. Mrz 2005)

So, ich habs geschaft *gg* war ne schwaere geburt aber jetzt klappts 

Und so hab ichs gemacht  :


```
//Button event fuer "Klasse select" ##########################################

  void bndSelectKl_mouseClicked(MouseEvent e)

  {

    String strTest = (String) lstKLasse.getSelectedValue();



    System.out.println(strTest);

    strSchuelerF = "c:\\";

    System.out.println(strSchuelerF);

    

    File langDir2 = new File(strSchuelerF);

    String[] languageFiles2 = langDir2.list();



    lstSchueler.setModel(new DefaultListModel());

    lstSchueler.setListData(langDir2.list());



  }

//############################################################################
```


----------



## Wildcard (28. Mrz 2005)

Das ist trotzdem nicht richtig!
Wenn du es so machst kannst du dir das Model auch sparen.
Die JList ist für die Darstellung eines bestehenden Models zuständig. Datenmanipulationen werden NUR im Model vorgenommen!


----------



## Negr0 (28. Mrz 2005)

egal, haubt sache es klappt


----------



## Wildcard (28. Mrz 2005)

:roll:

Edit Illuvatar: [schild=12 fontcolor=000000 shadowcolor=C0C0C0 shieldshadow=1]SPAMMER![/schild] 
Edit Wildcard:


----------



## mic_checker (29. Mrz 2005)

Warum machst du es nicht so wie oben beschrieben ? Wenn du ein ander Mal das selbe Problem hast dann wirst du mit diesem Ansatz nicht weiter kommen, es ist ja auch nicht viel mehr Arbeit...



> Bekomme zwar beim Java-Optimieren keine Fehlermeldungen



Btw. du meinst das "Kompilieren"


----------



## Negr0 (29. Mrz 2005)

Java ist und bleibt ne Interpreter/Script spache, das was der Java "Kompiler" da macht hat mit dem eigendlichen kombilieren nichts zu tun  er wandelt den Code nur in einen "Byte-Code" um... Ja ich gestehe ich bin C/C++ Coder aus leidenschaft


----------

