Problema con JTable e Vector

bircastri

Nuovo Utente
28 Mar 2009
16
0
0
Salve ragazzi ho un problema che mi sta assalendo da giorni.

Ho la necessità di realizzare un JTable che prenda i dati da un vettore.

Questo vettore contiene il risultato di una query effettuata sul database.

Ho utilizzato per creare la tablle un table model estendendo AbstractTableModel.

Purtroppo ho dei problemi di corretta visualizzazione dei dati. vi posto un po di codice

Codice:
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;

import java.awt.Dimension;
import java.awt.GridLayout;
import java.util.Vector;

/** 
 * TableDemo is just like SimpleTableDemo, except that it
 * uses a custom TableModel.
 */
public class TableDemo extends JPanel {
    private boolean DEBUG = false;
static Database db;
    public TableDemo() {
        super(new GridLayout(1,0));
Vector v = new Vector();
         v = db.eseguiQuery( "SELECT CODICE_LOCALITA, ORA_PARTENZA,ORA_ARRIVO_DA, archivionotearrivi.ABBREVIAZIONE, archivionotearrivi2.ABBREVIAZIONE FROM archiviopartenzeferiali, archiviolocalita, archivionotearrivi, archivionotearrivi2 WHERE codice_localita = archiviolocalita.codice and localita = 'Manfredonia'and  codice_1nota = archivionotearrivi.codice and codice_2nota = archivionotearrivi2.codice  ;" );
        
        System.out.println(v);
        MyTableModel dataModel = new MyTableModel(v);
        // crea la tabella
        JTable table = new JTable(dataModel);
        
        JScrollPane scrollpane = new JScrollPane(table);
     // aggiunge lo ScrollPane al pannello
     add(scrollpane);
    }

    class MyTableModel extends AbstractTableModel {
        
        
    	Vector v = null;
    	// intestazioni delle colonne
    	String[] ColName = {"Titolo", "Autore",
    	"Editore", "Anno" ,"Cinque"};
    	
    	public MyTableModel(Vector v) {
    		this.v = v; // inizializzato con il vettore
    		}
          
    	public int getColumnCount()
    	{ return ColName.length; }

    	public int getRowCount() { 
    	//	System.out.println("Stampo"+v.size());
    		return v.size();}
   
    	public String getColumnName(int col) {
    		return ColName[col];
    		}
      
     

        /*
         * JTable uses this method to determine the default renderer/
         * editor for each cell.  If we didn't implement this method,
         * then the last column would contain text ("true"/"false"),
         * rather than a check box.
         */
        public Class getColumnClass(int c) {
            return getValueAt(0, c).getClass();
        }

        /*
         * Don't need to implement this method unless your table's
         * editable.
         */
        public boolean isCellEditable(int row, int col)
        {
        // nessuna cella editabile
        return false;
        }

        public Object getValueAt(int row, int col) {
        	
        	System.out.println(v.elementAt(row));
        	return v.elementAt(row);
        	
        	
        	
        	}

        /*
         * Don't need to implement this method unless your table's
         * data can change.
         */
        

      
    }

    /**
     * Create the GUI and show it.  For thread safety,
     * this method should be invoked from the
     * event-dispatching thread.
     */
    private static void createAndShowGUI() {
        //Create and set up the window.
        JFrame frame = new JFrame("TableDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Create and set up the content pane.
        TableDemo newContentPane = new TableDemo();
        newContentPane.setOpaque(true); //content panes must be opaque
        frame.setContentPane(newContentPane);

        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                inizializzaDatabase();
            	createAndShowGUI();
            }
        });
    }
    
    private static void inizializzaDatabase() {
		// TODO Auto-generated method stub
		db = new Database("partenzearrivi");
	    if ( !db.connetti() ) {
	       System.out.println("Errore durante la connessione al database :(");
	       System.out.println( db.getErrore() );
	       System.exit(0);
	    }
	    else{
	    	System.out.println("Mi sono connesso");
	    }
	}//fi
}


questo invece è il codice del metodo eseguiquery della classe Database.

Codice:
public Vector eseguiQuery(String query) {
	      Vector v = null;      
	      int colonne = 0;
	      try {
	         Statement stmt = db.createStatement();     // Creo lo Statement per l'esecuzione della query
	         ResultSet rs = stmt.executeQuery(query);   // Ottengo il ResultSet dell'esecuzione della query
	         v = new Vector();
	         ResultSetMetaData rsmd = rs.getMetaData();
	         //rsmd = rs.getMetaData();
	         colonne = rsmd.getColumnCount();
	//qualche modifica qui, in modo che si lavori su Vector piuttosto
	//che su String[]
	         while(rs.next()) {   // Creo il vettore risultato scorrendo tutto il ResultSet
	            Vector record = new Vector();
	            for (int i=0; i<colonne; i++) {
	                record.add(rs.getString(i+1));
	            }
	            v.add(record);
	         }
	         rs.close();     // Chiudo il ResultSet
	         stmt.close();   // Chiudo lo Statement
	      } catch (Exception e) { e.printStackTrace(); errore = e.getMessage(); }

	      return v;
	   }


il risultato che io ottengo è il seguente

[1, 10:10:59, 10:50:10, FBP, FBM]
[1, 10:15:59, 10:12:00, FBM, FBP]
[1, 10:10:59, 10:50:10, FBP, FBM]
[1, 10:15:59, 10:12:00, FBM, FBP]
[1, 10:10:59, 10:50:10, FBP, FBM]
[1, 10:15:59, 10:12:00, FBM, FBP]
[1, 10:10:59, 10:50:10, FBP, FBM]

ogni riga corrisponde a ciò che la tabella dovrebbe contenere, ogni elemento su una cella quindi una riga deve contenere

1 nella cella successiva 10:10:59 ecc ecc

invece io ottengo su ogni cella una cosa del genere [1, 10:10:59, 10:50:10, FBP, FBM] cioè quello che dovrei avere su una intera riga io lo ho in una cella

come posso risolvere questo problema

grazie a tutti
 

lespaul

Utente Attivo
30 Lug 2009
91
6
0
www.simplesoft.it
Ciao bircastri,
ho dato un'occhiata al codice. Il metodo della classe astratta AbstractTableModel
Codice:
public Object getValueAt(int row, int col) {
        ......	
}
viene richiamato ogni volta che si deve caricare il valore nella cella di coordinate row,col. In questo caso sembra che tu nella cella ritorni solo l'intera riga non considerando la colonna. In questo caso hai un Vector di Vector quindi dovresti fare in questo modo:
Codice:
public Object getValueAt(int row, int col) {        	
        System.out.println(v.elementAt(row));
        Vector row = (Vector)v.elementAt(row)
        return row.elementAt(col);
}
Infatti la stringa [1, 10:10:59, 10:50:10, FBP, FBM] sembra essere il toString di un Vector dove ogni elemento è il valore della colonna.

Facci sapere
 
Discussioni simili
Autore Titolo Forum Risposte Data
B Problema con JTable Java 8
O problema con dvr dahua xvr5116 IP Cam e Videosorveglianza 0
G Problema con Xampp Web Server 1
andrea barletta Problema con miniature comandi Photoshop 0
I problema con alice Posta Elettronica 0
N Problema con position absolute e overflow HTML e CSS 4
L Problema con inner join PHP 11
K [php] Problema con inner join PHP 4
K [PHP] Problema con variabili concatenate. PHP 1
O problema con query PHP 4
I problema con 2 account Posta Elettronica 1
L problema collegamento file css con html HTML e CSS 1
E Problema accesso a file con app sviluppata con MIT APP INVENTOR 2 Sviluppo app per Android 0
M Problema con Try Catch PHP 0
Sergio Unia Problema con gli eventi del mouse su una data table: Javascript 2
T PROBLEMA CON SESSIONI PHP 3
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
R problema con else PHP 0
T PROBLEMA CON ARRAY PHP 8
L problema con query select PHP 2
R Problema query con ricerca id numerico PHP 2
F Problema con risposta PHP 0
S problema con recupero dati tabella mysql PHP 2
Z Problema con il mio tp-l i nk Reti LAN e Wireless 1
L Problema RAM con Tomcat 8 Apache 0
napuleone problema con sort e asort PHP 4
Z Problema con INT MySQL PHP 1
Z Problema database MySQL con XAMPP PHP 0
M Problema con controllo form in real time jQuery 6
Z Problema di sincronizzazione PAYPAL con PHP PHP 1
G Problema con Get page PHP 4
P Problema con require once PHP 6
P Problema con i package Java 1
A Problema login con Safari PHP 14
F INDESIGN: problema esportazione esecutivo per la stampa con foto B/N Webdesign e Grafica 0
S problema con css bootstrap3 HTML e CSS 4
M .load() problema con caricamenti dinamici di js Javascript 0
G Problema con eccessiva nitidezza apertura Camera Raw Photoshop 0
G Problema ------- con Query PHP 1
G Problema con Query PHP 1
T problema con select dinamica con jquery Javascript 0
S Problema con spazi bianchi HTML e CSS 5
A PROBLEMA: insert mysqli con dati Tagsinput Presentati al Forum 0
Tommy03 Problema con z-index HTML e CSS 3
M Problema inserimento parole con apostrofo nel db PHP 5
C Problema con dati meteo xml XML 1
S Problema con infrarossi videocamera IP Cam e Videosorveglianza 1
V Problema con librerie allegro5 c++ C/C++ 1
M Problema con php per calcolo costo percentuale PHP 7
S Problema con mysqli_num_rows PHP 18

Discussioni simili