Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di Umanista
    Registrato dal
    Jan 2002
    Messaggi
    1,022

    [java] passare valore vettori ad array di classe

    Ho una classe che utilizzo come TableModel

    codice:
    public class GestioneTabella extends AbstractTableModel {
    
        public String[] NomiColonne;
        public String[][] Celle;
    ...
    dopo averla istanziata vorrei passare i valori agli array NomiColonne e Celle.
    I valori li prelevo da un db, e li archivio in vettori, quindi ho una cosa del genere

    codice:
        Vector cols = new Vector(); // Colonne
        cols.addElement("colonna1");
        cols.addElement("colonna2");
        cols.addElement("colonna3");
        cols.addElement("colonna4");
    
    //ciclo per estrarre i dati dal db
    
     while(rs.next()){
    
            Vector vett = new Vector();
    
            vett.addElement(rs.getString("field1"));
            vett.addElement(rs.getString("field2"));
            vett.addElement(rs.getString("field3"));
            vett.addElement(rs.getString("field4"));
    
            rows.addElement(vett);
    
          }

    Ho provato a fare così senza risultati

    codice:
         //Istanzia tableModel
         GestioneTabella myTabModel = new GestioneTabella();
              
         myTabModel.NomiColonne = (String[]) cols.toArray();
         myTabModel.Celle = (String[][]) rows.toArray();
         
          // Associa il table model al JTable
          final JTable jTable1 = new JTable(myTabModel);

  2. #2
    Utente di HTML.it L'avatar di Umanista
    Registrato dal
    Jan 2002
    Messaggi
    1,022
    Credo di aver risolto

    codice:
    
     public class GestioneTabella extends AbstractTableModel {
    
        protected Vector NomiColonne = null;
        protected Vector Celle = null;
    
      ...
    
      // ora i valori li passo direttamente come vettori
      
     // Istanzia il table model
         GestioneTabella myTabModel = new GestioneTabella();
         
         // Associa il table model al JTable
          final JTable jTable1 = new JTable(myTabModel);
            
         myTabModel.NomiColonne = cols;
         myTabModel.Celle = rows;

  3. #3
    Si cambiando il tipo di contenitori nel TableModel si, altrimenti avresti dovuto creare un metodo che ti estraeva i valori dai vector e li inseriva nel TableModel.

    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

  4. #4
    Utente di HTML.it L'avatar di Umanista
    Registrato dal
    Jan 2002
    Messaggi
    1,022
    In realtà non ho risolto nulla
    E' veramente frustrante. Ho provato in tutti i modi, ho controllato centinaia di pagine su internet, ma non arrivo a capo di come diavolo usare questo tableModel. Non trovo un esempio uguale all'altro...

    Dunque, io ho questo table model
    codice:
      public class GestioneTabella  extends DefaultTableModel {
                  
        protected String[] NomiColonne; 
        protected Vector Celle[][] = null; 
        
        
          public int getRowCount() {
           return NomiColonne.length;
          }
    
          public int getColumnCount() {
            return NomiColonne.length;
          }
    
          public String getColumnName(int column) {
            return NomiColonne[column];
          }
         
        
          public boolean isCellEditable(int nRow, int nCol) {
            return false;
          }
    
          public Object getValueAt(int nRow, int nCol) {
            if (nRow < 0 || nRow >= getRowCount())
              return "";
    
            return Celle[nRow][nCol];
          }
       
    
      }
    ma non riesco in nessun modo a passargli i valori estratti dal db e contenuti nei vettori. Sto impazzendo

  5. #5
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    direi che getRowCount non è giusto
    getValueAt ritorna un Vector ma dovrebbe ritornare un oggetto semplice come una stringa

  6. #6
    Originariamente inviato da Umanista
    In realtà non ho risolto nulla
    E' veramente frustrante. Ho provato in tutti i modi, ho controllato centinaia di pagine su internet, ma non arrivo a capo di come diavolo usare questo tableModel. Non trovo un esempio uguale all'altro...

    Dunque, io ho questo table model
    codice:
      public class GestioneTabella  extends DefaultTableModel {
                  
        protected String[] NomiColonne; 
        protected Vector Celle[][] = null; 
        
        
          public int getRowCount() {
           return NomiColonne.length;
          }
    
          public int getColumnCount() {
            return NomiColonne.length;
          }
    
          public String getColumnName(int column) {
            return NomiColonne[column];
          }
         
        
          public boolean isCellEditable(int nRow, int nCol) {
            return false;
          }
    
          public Object getValueAt(int nRow, int nCol) {
            if (nRow < 0 || nRow >= getRowCount())
              return "";
    
            return Celle[nRow][nCol];
          }
       
    
      }
    ma non riesco in nessun modo a passargli i valori estratti dal db e contenuti nei vettori. Sto impazzendo
    Guarda che la classe DefaultTableModel ha un metodo che si chiama setVectorData che si asepetta un vetor di vectors come parametro.L'unica cosa che devi fare è costruirti un vector vuoto, aggiungergli ad uno (magari in un ciclo)ad uno i vari vectors che contengono i dati per ogni riga della tabella e poi passare il vector complessivo al metodo.Infine costruisci una JTable con quel defaultTableModel come parametro del costruttore,dovrebbe andare.
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  7. #7
    Quello che intendo è chè una volta che hai fatto questo:
    codice:
    while(rs.next()){
    
            Vector vett = new Vector();
    
            vett.addElement(rs.getString("field1"));
            vett.addElement(rs.getString("field2"));
            vett.addElement(rs.getString("field3"));
            vett.addElement(rs.getString("field4"));
    
            rows.addElement(vett);
    
          }
    Ti dovrebbe essere sufficiente fare così:
    codice:
    DefaultTableModel myModel = new DefaultTableModel();
    myModel.setDataVector(rows);
    JTable myTable = new JTable(myModel);
    Ovviamente così tutti i valori veranno visualizzati come stringhe,per visualizzarli col tipo corretto ti basta sovrascrivere il metodo getColumnClass
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  8. #8
    Utente di HTML.it L'avatar di Umanista
    Registrato dal
    Jan 2002
    Messaggi
    1,022
    Grazie mille, ora provo.

  9. #9
    Utente di HTML.it L'avatar di Umanista
    Registrato dal
    Jan 2002
    Messaggi
    1,022
    Originariamente inviato da unomichisiada

    Ti dovrebbe essere sufficiente fare così:
    codice:
    DefaultTableModel myModel = new DefaultTableModel();
    myModel.setDataVector(rows);
    JTable myTable = new JTable(myModel);
    Ovviamente così tutti i valori veranno visualizzati come stringhe,per visualizzarli col tipo corretto ti basta sovrascrivere il metodo getColumnClass
    Grazie unomichisiada, funziona perfettamente.
    Ora ho studiato un pò di tutorial sul tableModel e ho cominciato a capirci qualcosa.

  10. #10
    Originariamente inviato da Umanista
    Grazie unomichisiada, funziona perfettamente.
    Ora ho studiato un pò di tutorial sul tableModel e ho cominciato a capirci qualcosa.
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

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 © 2024 vBulletin Solutions, Inc. All rights reserved.