G
GuestStar
Gast
Hallo,
ich möchte eine JList mit vielen Einträgen füllen - so circa 500 bis 1.500 Stück (oben gerne offen) - und bekomme das nicht hin. Doch zunächst was ich schon habe:
* DefaultListModel, mit dem über "addElement(Object v)" meine Objekte gesetzt werden. D.h. ich habe intern eine ArrayList, die meine Objekte (Video-Objekte) beinhaltet und diese für das Programm zur Verfügung stellt. Über addElement setze ich diese Objekte dann "in die Liste".
* Einen eigenen DefaultListCellRenderer, der die Video-Objekte entgegen nimmt und die wichtigen Daten rendert (und auch ein Icon).
* Die interne ArrayList ist "fest", d.h. ist zwingend nötig. Es ändert sich relativ häfig etwas ... neues Video/Video-Status ändert sich.
Ich habe nun also versucht eine update-Methode zu schreiben, die alle 1000 ms ausgeführt wird und sich die (1) interne ArrayList holt, (2) alle Einträge der JList löscht und (3) die Objekte der ArrayList einfügt. Doch das geht nicht so toll (was bei der Menge an Daten ja nicht so verwunderlich ist); es kommt immer eine Exception:
Der Inhalt der JList erscheint auch nur für kurze Zeit und ist dann wieder weg ...
Aber da muss es doch eine bessere Variante geben, um diese Problem in den Griff zu bekommen. Habt Ihr eine Idee?
Gruß,
GuestStar
ich möchte eine JList mit vielen Einträgen füllen - so circa 500 bis 1.500 Stück (oben gerne offen) - und bekomme das nicht hin. Doch zunächst was ich schon habe:
* DefaultListModel, mit dem über "addElement(Object v)" meine Objekte gesetzt werden. D.h. ich habe intern eine ArrayList, die meine Objekte (Video-Objekte) beinhaltet und diese für das Programm zur Verfügung stellt. Über addElement setze ich diese Objekte dann "in die Liste".
* Einen eigenen DefaultListCellRenderer, der die Video-Objekte entgegen nimmt und die wichtigen Daten rendert (und auch ein Icon).
* Die interne ArrayList ist "fest", d.h. ist zwingend nötig. Es ändert sich relativ häfig etwas ... neues Video/Video-Status ändert sich.
Ich habe nun also versucht eine update-Methode zu schreiben, die alle 1000 ms ausgeführt wird und sich die (1) interne ArrayList holt, (2) alle Einträge der JList löscht und (3) die Objekte der ArrayList einfügt. Doch das geht nicht so toll (was bei der Menge an Daten ja nicht so verwunderlich ist); es kommt immer eine Exception:
Java:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 466
at javax.swing.plaf.basic.BasicListUI.updateLayoutState(Unknown Source)
at javax.swing.plaf.basic.BasicListUI.maybeUpdateLayoutState(Unknown Source)
at javax.swing.plaf.basic.BasicListUI.getCellBounds(Unknown Source)
at javax.swing.plaf.basic.BasicListUI.getPreferredSize(Unknown Source)
at javax.swing.JComponent.getPreferredSize(Unknown Source)
at javax.swing.ViewportLayout.layoutContainer(Unknown Source)
at java.awt.Container.layout(Unknown Source)
at java.awt.Container.doLayout(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validate(Unknown Source)
at javax.swing.RepaintManager.validateInvalidComponents(Unknown Source)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Aber da muss es doch eine bessere Variante geben, um diese Problem in den Griff zu bekommen. Habt Ihr eine Idee?
Gruß,
GuestStar