JList und DefaultListModel - Aktualisierungsproblem

Hallo miteinander,

folgendes Problem: Eine JList bekommt beim Erstellen ein DefaultListModel-Objekt mitgeliefert.
Zur Programmlaufzeit werden diesem DefaultListModel (per Benutzeraktion) weitere Elemente hinzugefügt. Jetzt hätte ich natürlich gerne, dass diese JList sich aktualisiert und die neuen Elemente auch anzeigt. Tut sie aber nicht. Ist auch irgendwie logisch, schließlich kennt die JList zwar ihr DefaultListModel, letzteres jedoch nicht die JList.

Jetzt habe ich gehofft, die Liste mit JList.validate(), .repaint(), oder mit JList.setVisible(false) und anschließendem JList.show() dazuzubringen, sich das DefaultListModel quasi erneut "anzuschauen", klappt aber auch nicht.

Weiß jemand, wie ich das Biest aktualisieren kann? Von mir aus kann es auch ein anderes Inhaltsobjekt sein, ich bin nicht auf DefaultListModel festgelegt. Hauptsache, das Aktualisieren klappt.

Danke schonmal und Gruß

henning-malaysia
 
Vielleicht hilft dir das..

Code:
public class DynamicList
{
    public static void main(String[] args) 
    {
	final DefaultListModel model = new DefaultListModel();

	KeyListener keyTypedListener = new KeyAdapter() {
	    public void keyTyped(KeyEvent e) {
		if ((e.getKeyChar() == '\b') && (model.getSize() > 0)) {
		    model.removeElementAt(model.getSize() - 1);
		}
		else if (e.getKeyChar() != '\b') {
		    model.addElement("Added " + e.getKeyChar());
		}
	    }
	};

	JList list = new JList(model);
	list.addKeyListener(keyTypedListener);
	
	JFrame frame = new JFrame("DefaultListModel JList Demo");

	WindowListener l = new WindowAdapter() {
	    public void windowClosing(WindowEvent e) { System.exit(0); }
	};
	frame.addWindowListener(l);
	
	JScrollPane scrollPane = new JScrollPane(list);
	scrollPane.setBorder(new TitledBorder("Type to add list elements, backspace to remove"));

	frame.getContentPane().add(scrollPane, BorderLayout.CENTER);	
	frame.pack();
	frame.setVisible(true);
    }

}

den Text dazu gibts hier http://java.sun.com/products/jfc/tsc/tech_topics/jlist_1/jlist.html

Ciao...
 
Wunderbar, hat funktioniert. Das Problem war bei mir, dass ich die Änderungen am externen Model gemacht habe, für welches sich die JList aber nicht mehr interessiert. Die Änderungen müssen vielmehr direkt an JList.getModel() durchgeführt werden.
 
Hallo!

Ich bekomme die hinzugefügten Werte einfach nicht angezeigt. :( Meine Standardwerte Item 1, Item 2, Item 3 etc. bleiben immer drin stehen, obwohl ich in listModel (1;MOEP, 1028;Installation Telefonanlage) andere Werte hinzugefügt habe. Was habe ich falsch gemacht?

Code:
                DefaultListModel listModel = new DefaultListModel();
                JList jList1 = new JList(listModel);

                try 
                {                     
                    // Lokale Variablen 
                    WebRequest hfRequest = null; 
                    WebResponse hfResponse= null; 

                    // Initialisiere HttpUnit 
                    WebConversation loConversation = new WebConversation(); 
                    // Erzeuge einen Web-Request 
                    hfRequest = new GetMethodWebRequest(
                            "http://test.de/mysql/xmlausgabe.php?passwort=1&offlinedata=true");

                    // Ermitteln der Response-Nachricht 
                    hfResponse = loConversation.getResponse(hfRequest); 
                    String hfXMLResponse = hfResponse.getText();

                    //// Die Datei aufmachen, und Zeile für Zeile auslesen 
                    try
                    {
                        DocumentBuilderFactory factory  = DocumentBuilderFactory.newInstance();
                        DocumentBuilder builderXML  = factory.newDocumentBuilder();
                        Document docXML = builderXML.parse( new File("C:/xmlausgabe.xml"));
                        // ---- Get list of nodes to given element tag name ----
                        NodeList auftragNodeList = docXML.getElementsByTagName("auftrag");
                        for(int i=0; i<auftragNodeList.getLength(); i++)
                        { 
                            int hfDurchlaufKZ = 1;
                            String hfBez;
                            String hfNummer;
                            Element xmlElementA = (Element) auftragNodeList.item(i); 
                            NodeList xmlBezA = xmlElementA.getElementsByTagName("bezeichnung"); 
                            for (int j=0; j<xmlBezA.getLength(); j++)
                            {
                                    hfBez = xmlBezA.item(0).getTextContent();
                                    listModel.addElement(hfBez);
                                }
                            }
                        }
                    }
                    catch( SAXParseException spe ) 
                    {
                        System.out.println( "\n** Parsing error, line " + spe.getLineNumber()
                                + ", uri "  + spe.getSystemId() );
                        System.out.println( "   " + spe.getMessage());
                        Exception e = ( spe.getException() != null ) ? spe.getException() : spe;
                        e.printStackTrace();
                    } 
                    catch( SAXException sxe ) 
                    {
                        Exception e = ( sxe.getException() != null ) ? sxe.getException() : sxe;
                        e.printStackTrace();
                    } 
                    catch( ParserConfigurationException pce ) 
                    {
                        pce.printStackTrace();
                    } 
                    catch( IOException ioe ) 
                    {
                        ioe.printStackTrace();
                    }
                }
                catch (Exception ex) 
                { 
                    System.err.println("Exception: " + ex); 
                } 

                System.out.println(listModel.toString());
                jList1 = new JList(listModel);

Vielen Dank im voraus.

Gruß
NR
 

Neue Beiträge

Zurück