DefaultListModel beim Neuaufruf der jList wird irgendwie nicht gelöscht?

Lautsprecher

Erfahrenes Mitglied
Hallo,

ich verwende für meine JList das DefaultListModel. Die JList wird gefüllt, in dem der User einen Button drück - der Name des Buttons ausgelesen wird und in die JList geschrieben wird.

Code:
private JList getJListFC() {
    if (jListFC == null) {
    DefaultListModel listModel = new DefaultListModel(); 
    jListFC = new JList(listModel);
			
	//listModel.addListDataListener(new Info.MyListDataListener());
	jListFC.addMouseListener(new java.awt.event.MouseAdapter() {
	public void mouseClicked(java.awt.event.MouseEvent e) {
		int index = jListFC.getSelectedIndex();
					
	    ((DefaultListModel)(jListFC.getModel())).remove(index);  
	}
    etc......
});

die jList befülle ich in einer separaten Methode:

Code:
public void actionPerformed(java.awt.event.ActionEvent e)
{
      if(e.getActionCommand().equals(e.getActionCommand()));
	{	
	     try
   {
	DefaultListModel lmodel = new DefaultListModel();
	  ftext = (e.getActionCommand());
	if  (ftext3 != null)
                 {
	     lmodel.addElement ( ftext3 );
	     ftext3 = null;
	}
jListFC.setModel(lmodel);
etc.....

Das befüllen klappt beim ersten Programmaufruf ganz gut. User drückt z.B. 2 x auf Button
-> es erscheinen 2 Einträge:

z.B.

Sonne
Mond

sobald man aber einen Eintrag löscht und einen neues Element hinzufügen will gibt es ein Problem: Löscht man z.B. Mond und will dafür Sterne haben erhalte ich folgende Ausgabe in der JList

nach Löschvorgang:
Sonne

nach Löschvorgang und neuen Eintrag anlegen
Sonne statt richtig: Sonne
Mond Sterne
Sterne


Ich denke das "Mond" zwar in der JList gelöscht wird, aber irgendwie im DefaultListModel stehen bleibt?
 
Moin!
Schau dir erstmal folgendes an:


Code:
public void actionPerformed(java.awt.event.ActionEvent e)
{
      if(e.getActionCommand().equals(e.getActionCommand()));

    {
Die Abfrage ist ja zum einen völlig sinnlos, zum anderen wird sie vom Java Interpreter nicht als solche wahrgenommen, da du hinter dem if ein Semikolon gesetzt hast

Weiterhin:
Code:
DefaultListModel lmodel = new DefaultListModel();
ftext = (e.getActionCommand());
if  (ftext3 != null){
lmodel.addElement ( ftext3 );
ftext3 = null;
Erstellst du jedesmal, wenn der Button gedrückt wird, ein neues Model, fügst den Text hinzu und weist in der Liste zu. Ich kenne den übrigen Code ja nicht, aber allein auf dem was dasteht dürfte eigentlich immer nur eine Textzeile in der Liste stehen.
Schau dir doch bitte mal das DefaultListModel an:
http://java.sun.com/javase/6/docs/api/javax/swing/DefaultListModel.html
Die Methode zum Entfernen eines Elementes nutzt du ja schon, nutze doch dann bitte auch die Methoden, um ein Element hinzuzufügen. Für diese einfachen Datenoperationen sind die Models nämlich da. Ein Austauschen des kompletten Models so wie du es machst, ist völlig überflüssig..

Ändere das alles jetzt bitte mal in deinem Code. Falls es dann immer noch Probleme gibt, bitte mal den kompletten lauffähigen code posten, damit man es auch mal testen kann..

*grüssle*
MeinerEiner
 
Hallo,
ich habe jetzt das mit getActionCommand geändert. Außerdem habe ich das Befüllen der Jlist vereinfacht:

Code:
public void actionPerformed(java.awt.event.ActionEvent 
{
   {
        	 lmodel.addElement(e.getActionCommand());	
	jListFC.setModel(lmodel);
        }
    }
});

jetzt funktioniert es einwandfrei :-) Danke nochmals

das DefaultListModel habe ich jetzt aus den Methoden rausgekommen und "allgemein" deklariert
 
Zurück