Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    60

    [JAVA] Caricamento dati su JTable

    Salve,
    dopo aver compilato la Jtable (il cui tableModel implementa una matrice di Object), salviamo in un file binario, e pare funzioni. Al momento del caricamento facciamo leggere il contenuto del file, e per ogni argomento di ogni cella che leggiamo, riversiamo il contenuto letto nelle rispettive coordinate [riga][colonna] tramite il setValueAt(Object valore, int riga, int colonna), ma la tabella non si riempie (almeno graficamente).

    Grazie per le eventuali risposte!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] Caricamento dati su JTable

    Originariamente inviato da bandofa
    dopo aver compilato la Jtable (il cui tableModel implementa una matrice di Object), salviamo in un file binario, e pare funzioni. Al momento del caricamento facciamo leggere il contenuto del file, e per ogni argomento di ogni cella che leggiamo, riversiamo il contenuto letto nelle rispettive coordinate [riga][colonna] tramite il setValueAt(Object valore, int riga, int colonna), ma la tabella non si riempie (almeno graficamente).
    Il table model l'hai sviluppato tu (tipicamente si estende AbstractTableModel)? Cioè intendo dire: il setValueAt l'hai implementato tu? Dopo aver aggiornato la struttura dati hai invocato il fireTableCellUpdated(int row, int column) che serve a notificare i listener?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    60
    No non l'ho chiamato. A cosa serve?
    Lascindo starela serializzazione, ho provato a salvare su di un file.txt, facendo scrivere sul file, in stringhe, usando il .write(), un elmento della matrice per ogni riga, in modo che poi li ricarico con il buff.readLine(), ma quando faccio carica, mi vengono nella tabella numeri a caso che non c'entrano, e nemmeno nelle celle precedentemente scritte, proprio a caso!!!!
    Perchè!!!!!!?????

    P.S.: così mi salva tutto correttamente sul file.txt

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da bandofa
    No non l'ho chiamato. A cosa serve?
    A notificare i listener. Se il table model è agganciato almeno ad 1 JTable c'è almeno 1 listener registrato .... è quel JTable stesso!
    Quando qualcosa "cambia" nel model, i listener devono essere notificati e questo serve come minimo a JTable per capire che deve aggiornare "qualcosa" a video.
    Centra con il pattern MVC.

    Originariamente inviato da bandofa
    ma quando faccio carica, mi vengono nella tabella numeri a caso che non c'entrano, e nemmeno nelle celle precedentemente scritte, proprio a caso!!!!
    Perchè!!!!!!?????
    Senza sapere altro, senza vedere il codice non posso averne alcuna idea .....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    60
    Posso metterti pezzetti di codice?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da bandofa
    Posso metterti pezzetti di codice?
    Se sono significativi ed esplicativi, sì.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    60
    La matrice è inizializzata con spazi, e dove c'è spazio (quindi una cella in cui non ho scritto) faccio scrivere '£', poi vado a capo.

    codice:
    //Salvataggio su file.txt
    public void scrivi()
    	{
    		try
    		{	
    			FileWriter out = new FileWriter (nomefile);
    			for(int i = 0; i < r; i++){
    				for(int j = 0; j < c; j++){
    					if(o[i][j] == " "){
    						out.write("£" + "\n");
    						}
    						
    					else{
    						out.write(o[i][j].toString());
    						out.write("\n");
    					}
    				}
    			}
    			out.close();
    		}
    		catch (IOException ex){
    			ex.printStackTrace();
    		}
    		System.out.println("Salvataggio eseguito correttamente");
    		
    	}
    Ora carico con un buff.readLine(), che leggendo riga per riga, mi riepie una cella alla volta (almeno credo), poi copio il contenuto di questa matrice o[][] in quella dichiarata nel TableModel.

    codice:
    //Caricamento da file
    public Object[][] leggi()
    	{
    		try
    		{	int i = 0;
    			int j = 0;
    			in = new FileReader(nomefile);
    			buff = new BufferedReader(in);
    			while(buff.readLine() != null){
    				if(buff.readLine() == "\n"){
    					j++;
    					if(j == c){
    						j = 0;
    						i++;
    						if(i == r)
    							return o;
    					}
    				}
    				o[i][j] = buff.readLine();
    			}
    				
    			in.close();
    		}
    		
    		catch (IOException ex){
    			ex.printStackTrace();
    		}
    		System.out.println("Caricamento eseguito correttamente");
    		return o;
    		
    	}

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Allora già solo vedendo questi pezzi di codice posso dirti:

    1) Spero vivamente che questi metodi scrivi() e leggi() NON siano nel table model.

    2) Bisognerebbe capire che tipo di oggetti ci sono nel table model, nella "matrice" di dati insomma. Intendo dire proprio il tipo di oggetto ... sono tutti String?

    3)
    codice:
    while(buff.readLine() != null){
        if(buff.readLine() == "\n"){
    Comunque è molto "dubbio". Per ogni riga letta ne leggi un'altra. E tieni presente che readLine() NON mette nella stringa restituita il newline e comunque == "\n" è in ogni caso sbagliato, primo appunto perché readLine non dà i \n e secondo perché se anche lo mettesse nella stringa con la comparazione dei reference non ottieni il risultato voluto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    60
    Scrivi() e leggi() sono nella classe IOFileW, e nelle celle sono tutte stringhe.

    quando metto cosi:
    codice:
    while(buff.readLine() != null){
    	if(buff.readLine() == "\n")
    vorrei dirgli, leggimi tutto il file finchè non arrivi in fondo,
    leggi la riga e metti il contenuto in o[i][j,]
    se leggi un "vai a capo", (controlla riga e colonna ecc ecc..)
    e metti in o, con in nuovi i, j la successiva riga.

    io non voglio nelle mia cella il "\n"..

    Ma visto che non funziona come mi consigli di fare?

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da bandofa
    quando metto cosi:
    codice:
    while(buff.readLine() != null){
    	if(buff.readLine() == "\n")
    vorrei dirgli, leggimi tutto il file finchè non arrivi in fondo,
    Già il test per != null ti dice se c'è una riga o si è arrivati al fondo. Ma il punto è che il valore che il readLine nella condizione restituisce lo devi usare.

    codice:
    String linea;
    while ((linea = buff.readLine()) != null) {
        // usa linea !
    }
    Questo è l'"idioma" tipico di utilizzo di readLine.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.