2015-06-13 6 views
5

Ich kann keinen Code bereitstellen, da dies ein abstraktes Problem ist, mit dem ich mich gerade befasse.Java Swing zeigt große Datenmengen aus ArrayLists an

Ich arbeite an einem Programm, mit dem ein Benutzer Spieler von Spielen verfolgen kann. Das Programm speichert im Wesentlichen eine Spielerprofilinformation in einer ArrayList. Ein Feature meines Programms, das ich möchte, ist, dass der Benutzer in der Lage ist, die gesamte ArrayList der Spieler zu durchsuchen.

Nehmen wir an, ich habe eine ArrayList von Player Objekte und die Größe ist sehr groß, sagen 1000. Ist es in Java möglich, dem Benutzer das Scrollen durch die ArrayList zu ermöglichen? Ich dachte daran, 10 JLabels zu erstellen und jedes Mal, wenn ein Benutzer auf eine Schaltfläche klickte, würde es durch die ArrayList zu den nächsten 10 Player Objekten durchlaufen. Aber das scheint nicht praktisch.

Gibt es irgendwelche Swing-Funktionen, die ich für dieses Problem nutzen kann?

Antwort

7

Verwenden Sie eine JTable, in der jede Tabellenzeile die Informationen für jeden Player enthält. Sie können die Klasse AbstractTableModel erweitern, um die Felder pro Spieler zu definieren, und welcher Spieler in welcher Tabellenreihe angezeigt wird.

Ich habe eine Java-App geschrieben, die JTables mit mehr als 2000 Zeilen und etwa 15 bis 20 Spalten verwendet, und hatte keine Leistungsprobleme. Um die angezeigten Zeilen zu begrenzen, können Sie auch RowFilter verwenden und die Sortierung mithilfe von RowSorter anpassen.

+0

Vielen Dank für den Vorschlag, ich werde mehr in JTables schauen. Wenn jemand mehr Vorschläge hat, bin ich offen für sie! –

+4

@RowenMcDaniel: re, '" Ich werde mehr in JTables schauen. Wenn jemand mehr Vorschläge hat, bin ich offen für sie! "' - Nein, das * ist * die richtige Antwort. Akzeptiere diese Antwort und beginne zu programmieren. Der Schlüssel ist, dass die JTable mit ihrer Verwendung von Rendering viel effizienter sein wird als Ihre Lösung, die die Erstellung und Anzeige vieler Komponenten beinhaltet. –

+0

@HovercraftFullOfEels Vielen Dank für diese Antwort: D. –