Visualizzazione dei risultati da 1 a 7 su 7

Discussione: JTable

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    178

    JTable

    Salve a tutti,

    Vorrei inserire gli oggetti di un JTable in un Vector e convertite il Vector in un ArrayList.
    E' possibile? Se si come fare ?
    Grazie.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Bombonera Visualizza il messaggio
    Vorrei inserire gli oggetti di un JTable in un Vector e convertite il Vector in un ArrayList.
    Questione un po' "vaga" .. nel senso che innanzitutto bisognerebbe vedere quale table model hai usato. Se hai esigenze davvero super-basilari (e magari la applicazione ha solo una o due tabelle), puoi anche usare DefaultTableModel, che è molto poco object-oriented poiché molto de-strutturato essendo solo un Vector di Vector di Object.

    Se le esigenze fossero più particolari, dovresti implementare un apposito table model. E se avessi svariate tabelle da trattare più o meno allo stesso modo, ciascuna orientata ad una certa entità, allora sarebbe (molto) utile implementare un table model "generico" nel senso che possa gestire un List<T> in modo da renderlo molto riutilizzabile.
    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
    Jul 2014
    Messaggi
    178
    Ne ho implementata soltanto una di Jtable e gli oggetti sono tutti della stessa classe.

    codice:
    import java.util.Vector;
    
    
    import javax.swing.table.AbstractTableModel;
    
    
    
    
    public class VectorTableModel extends AbstractTableModel
    {
    
    
    	Vector v = null;
    	String[] colName = {"Codice partita", "ID stadio", "Partita", "Data", "Prezzo"};
    	
    	public VectorTableModel(Vector v)
    	{
    		this.v = v;
    	}
    	
    	@Override
    	public int getColumnCount() 
    	{
    		return colName.length;
    	}
    
    
    	@Override
    	public int getRowCount() 
    	{
    		return v.size();
    	}
    
    
    	public String getColumnName(int col)
    	{
    		return colName[col];
    	}
    	
    	public Object getValueAt(int row, int col)
    	{
    		Partita partita = (Partita) v.elementAt(row);
    		
    		switch(col)
    		{
    		case 0: return partita.getCodicePartita();
    		case 1: return partita.getCodiceStadio();
    		case 2: return partita.getSquadraCasa() + " VS " + partita.getSquadraFuoriCasa();
    		case 3: return partita.getDataPartita();
    		case 4: return partita.getPrezzo();
    		default: return "";
    		}
    	}
    	
    	public Class getColumnClass(int c) 
    	{
            return getValueAt(0, c).getClass();
        }
    
    
    
    
    }

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Bombonera Visualizza il messaggio
    Ne ho implementata soltanto una di Jtable e gli oggetti sono tutti della stessa classe.
    A grandi linee, la tua implementazione è sensata ed appropriata. Il nome della classe è abbastanza generico, mentre invece la classe è specifica per Partita e non per altro tipo. Va anche bene .. cioè, non è quello un problema.

    Tieni però presente che il tuo table model non è editabile e nemmeno espandibile. Se tu dall'esterno vai a modificare strutturalmente il Vector che è lo stesso che ha esattamente il VectorTableModel, ovviamente il table model non ne "sa" nulla e quindi di per sé la tabella non può certo aggiornarsi.

    A parte questo, riguardo la tua richiesta iniziale, quale è il dubbio? Stai già gestendo un Vector di oggetti di un tuo tipo. Se poi dal Vector vuoi ottenere un ArrayList, basta usare l'apposito costruttore di ArrayList.
    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
    Jul 2014
    Messaggi
    178
    Quote Originariamente inviata da andbin Visualizza il messaggio
    A grandi linee, la tua implementazione è sensata ed appropriata. Il nome della classe è abbastanza generico, mentre invece la classe è specifica per Partita e non per altro tipo. Va anche bene .. cioè, non è quello un problema.

    Tieni però presente che il tuo table model non è editabile e nemmeno espandibile. Se tu dall'esterno vai a modificare strutturalmente il Vector che è lo stesso che ha esattamente il VectorTableModel, ovviamente il table model non ne "sa" nulla e quindi di per sé la tabella non può certo aggiornarsi.

    A parte questo, riguardo la tua richiesta iniziale, quale è il dubbio? Stai già gestendo un Vector di oggetti di un tuo tipo. Se poi dal Vector vuoi ottenere un ArrayList, basta usare l'apposito costruttore di ArrayList.
    Vorrei estrarre gli oggetti dal JTable e metterli in un Vector e poi metterli in un ArrayList in modo da ordinarli, poi metterli di nuovo in un Vector per poi inserirli nel JTable.
    Il problema è che non so come estrarre gli elementi da una JTable.

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Bombonera Visualizza il messaggio
    Vorrei estrarre gli oggetti dal JTable e metterli in un Vector e poi metterli in un ArrayList in modo da ordinarli, poi metterli di nuovo in un Vector per poi inserirli nel JTable.
    Il problema è che non so come estrarre gli elementi da una JTable.
    Ma hai già il Vector .... è quello che passi al tuo table model. E se vuoi creare un ArrayList dal Vector, basta che passi questo al costruttore di ArrayList.
    Puoi ordinare il ArrayList ma poi visto che VectorTableModel tratta solo vector, dovresti ricreare un Vector .... un po' macchinoso. In generale sarebbe più utile codificare verso le interfacce ... parlo di List, ovviamente.

    E comunque se vuoi puoi anche fare in modo che il sort venga fatto dentro il table model e poi notifichi l'update alla view, in tal caso non avresti nemmeno bisogno di ArrayList. Vector è ordinabile esattamente come ArrayList.
    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
    Jul 2014
    Messaggi
    178
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Ma hai già il Vector .... è quello che passi al tuo table model. E se vuoi creare un ArrayList dal Vector, basta che passi questo al costruttore di ArrayList.
    Puoi ordinare il ArrayList ma poi visto che VectorTableModel tratta solo vector, dovresti ricreare un Vector .... un po' macchinoso. In generale sarebbe più utile codificare verso le interfacce ... parlo di List, ovviamente.

    E comunque se vuoi puoi anche fare in modo che il sort venga fatto dentro il table model e poi notifichi l'update alla view, in tal caso non avresti nemmeno bisogno di ArrayList. Vector è ordinabile esattamente come ArrayList.
    Grazie andBin, funziona. Il problema è devo ancora imparare a ragionare ad oggetti dopo tanti anni di programmazione strutturale e procedurale.
    Meno male che ci sei tu :-)

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.