Hi zusammen,
ich habe mal wieder ein Problem und leider sehr ratlos.
Beim Scrollen (durch klick auf Pfeil) wird meine Table sehr sehr langsam neu gezeichnet,
die scrollbar zuckelt wirklich nur millimeter für millimeter runter.
Und ich bin schon langer auf der Suche woran dies liegt.
Meine Table
Es geht um eine JTable. Diese JTable erbt von JPanel.
Jede Zelle wird bei mir farblich dargestell durch setBackground(Color.xx).
Ich besitze ein eigenes TableModel, welches von AbstractTableModel erbt.
Dieses Model besitzt die Methode getValueAt() --> Dies bedeutet also, dass nur aus den Zellen
die Daten geholt werden, welche benötigt werden. Dies sind nur alle DARGESTELLTEN Zellen.
Meine Daten:
mein Table Model kann entweder auf eine TreeMap<LinkedList<Objekte> > zugreifen,
oder auf eine ArrayList<LinkedList<Objekte> >
Diese Daten sind SEHR GROß, die ArrayList ist zb. 200000 Felder lang.
Zoom:
Ich kann die Einträge der TreeMap bzw. ArrayList zusammenfassen.
Also z.B.: Eintrag 1-10 in ArrayList wird in Zelle 1 der Tabelle dargestellt.
Eintrag 11-20 der ArrayList wird in Zelle 2 der Tabelle dargestellt.
usw. (entsprechend für TreeMap).
Auf ZoomStufe 1 befindet sich Eintrag in der TreeMap bzw. ArrayList in einer Zelle in der Tabelle.
Ebenso ist hier die LinkedList<Objekte> meist nur mit einem Objekt befüllt.
Wird also bei Zoom 10 die Tabelle gezeichnet, dann werden die LinkedList<Objekte> von 10 Zellen immer
in eine zusammengefasst. und durch die getValueAt() Methode zurückgegeben.
Bei großem Zoom würde ich also erwarten, dass die Darstellung der Tabelle langsamer wird, da zuerst die
LinkedList<Objekte> von der verschiedenen Zellen zusammengefasst werden.
Aber selbst bei Zoom 1 ist das ganze wahnsinnig langsam. Auf dem Bildschirm sin dann etwa 1000 Zellen
dargestellt.
Wo kann der Fehler liegen? Feuere ich zuviele Events, wodurch die Tabelle zu oft gezeichnet wird?
Liegt das Problem an meiner Datenstruktur, auf die ich über das TableModel zugreife?
Wie kann ich es testen wo genau sehr viel Zeit verloren geht?
ich habe mal wieder ein Problem und leider sehr ratlos.
Beim Scrollen (durch klick auf Pfeil) wird meine Table sehr sehr langsam neu gezeichnet,
die scrollbar zuckelt wirklich nur millimeter für millimeter runter.
Und ich bin schon langer auf der Suche woran dies liegt.
Meine Table
Es geht um eine JTable. Diese JTable erbt von JPanel.
Jede Zelle wird bei mir farblich dargestell durch setBackground(Color.xx).
Ich besitze ein eigenes TableModel, welches von AbstractTableModel erbt.
Dieses Model besitzt die Methode getValueAt() --> Dies bedeutet also, dass nur aus den Zellen
die Daten geholt werden, welche benötigt werden. Dies sind nur alle DARGESTELLTEN Zellen.
Meine Daten:
mein Table Model kann entweder auf eine TreeMap<LinkedList<Objekte> > zugreifen,
oder auf eine ArrayList<LinkedList<Objekte> >
Diese Daten sind SEHR GROß, die ArrayList ist zb. 200000 Felder lang.
Zoom:
Ich kann die Einträge der TreeMap bzw. ArrayList zusammenfassen.
Also z.B.: Eintrag 1-10 in ArrayList wird in Zelle 1 der Tabelle dargestellt.
Eintrag 11-20 der ArrayList wird in Zelle 2 der Tabelle dargestellt.
usw. (entsprechend für TreeMap).
Auf ZoomStufe 1 befindet sich Eintrag in der TreeMap bzw. ArrayList in einer Zelle in der Tabelle.
Ebenso ist hier die LinkedList<Objekte> meist nur mit einem Objekt befüllt.
Wird also bei Zoom 10 die Tabelle gezeichnet, dann werden die LinkedList<Objekte> von 10 Zellen immer
in eine zusammengefasst. und durch die getValueAt() Methode zurückgegeben.
Bei großem Zoom würde ich also erwarten, dass die Darstellung der Tabelle langsamer wird, da zuerst die
LinkedList<Objekte> von der verschiedenen Zellen zusammengefasst werden.
Aber selbst bei Zoom 1 ist das ganze wahnsinnig langsam. Auf dem Bildschirm sin dann etwa 1000 Zellen
dargestellt.
Wo kann der Fehler liegen? Feuere ich zuviele Events, wodurch die Tabelle zu oft gezeichnet wird?
Liegt das Problem an meiner Datenstruktur, auf die ich über das TableModel zugreife?
Wie kann ich es testen wo genau sehr viel Zeit verloren geht?