JTable Daten stückweise einlesen

c_sidi90

Top Contributor
Hallo, ich möchte einen Table zur Laufzeit mit Daten füllen. Hierbei sollen immer nur z.B 20 Daten eingelesen werden, wenn diese im Table geladen wurden, sollen die nächsten 20 Daten gelesen werden.

Ich weiss leider nicht wie man ein solches vorhaben in Java nennt und weiss daher auch nicht wonach ich suchen muss. Kann mir jemand helfen ? 😛

Grund ist aus der DB nicht gleich alle 10 000 Datensätze einzulesen um performance zu sparen.
 
was heißt denn "wenn diese im Table geladen wurden"?
Du solltest dir vllt welche Daten du beim Lesen auslassen kannst, denn es werden wohl nicht alle 10000 gleichzeitig angezeigt.
 
momentan werden alle Daten direkt nach dem Methoden aufruf angezeigt. Der Table ist in einer Scrollpane komponente. Und da der Bildschirm natürlich keine 10k Daten aufeinmal anzeigen kann, möchte das immer erst 20 Daten geladen werden, und wenn man z.B. runterscrollt neue Daten geladen werden (die nächsten 20). Quasi eine Aktualisierung.
 
ja ist problemlos möglich... Du machst dir einfach ein eigenes TableModel und lädst mal die ersten 100 bei der Anzahl gibst du zurück wie viele es wirklich sind. Wenn der User jetzt runter scrollt werden ja für die Darstellung mit getValueAt die Werte angefordert, wenn jetzt Werte angefordert werden die du noch nicht hast oder die naher an der Grenze sind, lädst du nach
 
also quasi ein listener auf die Scrollpane und dann erneuter Methodenaufruf mit Parameterübergabe des letzten vorherigen ValueIndex?
 
ne, du brauchst mit dem Scrollpane nichts zu machen. Wenn du ein eigenes Model schreibst, dann werden automatisch die nötigen Methoden aufgerufen.
 
Ich habe bereits ein eigenes Model geschrieben, sonst würden die Daten ja nicht schon alle geladen und angezeigt werden. Momentan ist es halt nur so, dass alle aufeinmal in den Tablegeladen und angezeigt werden. Wenn ich dort sage "lade erstmal die ersten 100" und dann runterscroll passiert aber nichts automatisch. Sondern er beendet das einlesen dann bei 100. Datensatz
 
Ich deklarier Variablen z.B rowCount oder ColumnCount und fülle den Table mit 2 for-schleifen.

Das TableModel bekommt ein Object data[][] und ein Object columns[] Array übergeben.
 
Hab die Methode schnell auf Excelsheets umstrukturiert für das ausprobieren. Prinzip ist ja das selbe, so funktionierts ähnlich.
Hoffe das hilft dir mein Gedanken nachzuvollziehen.

Java:
public static void showDetails(String fileName){
		
		try {	
            FileInputStream myInput = new FileInputStream(fileName);
            POIFSFileSystem myFileSystem = new POIFSFileSystem(myInput);
            HSSFWorkbook myWorkbook = new HSSFWorkbook(myFileSystem);
            HSSFSheet mySheet = myWorkbook.getSheetAt(kategorieBox.getSelectedIndex()+1);
            Iterator rowIter = mySheet.rowIterator();
            Object data2[][] = new Object[mySheet.getPhysicalNumberOfRows()][mySheet.getPhysicalNumberOfRows()];
            
            
            if(rowIter.hasNext()){
            	rowIter.next();
            }
            
            while(rowIter.hasNext()){
            	
            	HSSFRow row = (HSSFRow) rowIter.next();
            	Iterator cellIter = row.cellIterator();
            	
            	while(cellIter.hasNext()){
            		HSSFCell cell = (HSSFCell) cellIter.next();
            		data2[cell.getRowIndex()-1][cell.getColumnIndex()] = cell.toString();
            	}
            	
            	TableModel model2 = new DefaultTableModel(data2, columnNamen2);
            	detailTable.setModel(model2);
            	
            }

P.S in der Methode werden nur die Daten dem Table übergeben, die Columns wurden vorher schon festgelegt.
 

Zurück
Oben