JList aktualisieren

  • Themenstarter Themenstarter Negr0
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
N

Negr0

Gast
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:

Code:
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"
 
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.
 
Naja, ich will ja in dem Sinne nix hinzufuegen, will nur das der Inhalt aktualisiert wird.
 
Ich hab das ganze jetzt mal mit DefaultListModel versucht, das hier ist da bei raus gekommen:

Code:
//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?
 
Code:
lstSchueler = new JList(langDir2.list());

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

Code:
lstSchueler = new JList(dlm);

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

Code:
		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..
 
Du machst das auch falsch!

Code:
 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 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:
 
??? 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?
 
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:

Code:
	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.
 
mic_checker hat gesagt.:
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:

Code:
	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.

Hast du den Code da mal getestet? Bei mir funktioniert das kein stratz ^^, bei removeAllElements gibt er mir ne fehlermeldung...
 
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 😉
 
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
 
der Source der Klasse ist im grossen und ganzen das gleich wie du mit gepostet hast:

Code:
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]);   

  }

}
 
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.
 
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:

Code:
//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:
 
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!
 
So, ich habs geschaft *gg* war ne schwaere geburt aber jetzt klappts 😛

Und so hab ichs gemacht 🙂 :

Code:
//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());



  }

//############################################################################
 
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!
 
:roll:

Edit Illuvatar: [schild=12 fontcolor=000000 shadowcolor=C0C0C0 shieldshadow=1]SPAMMER![/schild] 😱
Edit Wildcard: 😀
 
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"
 
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 😛
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben