Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [Java] Aggiungere colonna ad una tabella!

    ciao raga
    il mio problema e questo.

    io creo una tabella con dati prelevati da un database mysql.

    in questo modo:

    [CODE]
    stat = conn.createStatement();
    String query = "select cod_commessa,data,nome_macchina,cod_cliente,
    cliente.ragione_sociale from commessa left join cliente
    ocommessa.cod_cliente=cliente.id_cliente order by cod_commessa desc;";

    //esegue la query con le caratteristiche della tabbellascrollabile
    rs = stat.executeQuery(query);

    //crea la tabella con il modello TableModel
    TableModel model= new TableModel(rs);
    table = new JTable(model);
    //aggiunge la tabella allo scrollpane
    scrollpane = new JScrollPane(table);
    [\CODE]

    con un TabelModel cosi costruito :

    [CODE]
    public class TableModel extends AbstractTableModel {

    public TableModel(ResultSet aResultset){
    rs = aResultset;

    try{

    rsmd = rs.getMetaData();
    }catch (SQLException e){e.printStackTrace();}
    }

    public int getColumnCount() {
    // metodo che conta le colonne
    try{
    return rsmd.getColumnCount();
    }catch(SQLException e){e.printStackTrace(); return 0;}
    }

    public int getRowCount() {
    //metodo che conta le righe
    try{
    rs.last();
    return rs.getRow();
    }catch(SQLException e){e.printStackTrace();return 0;}
    }

    public Object getValueAt(int r, int c) {
    // metodo che aggiunge l'oggetto alla tabella
    try{
    rs.absolute(r+1);
    return rs.getObject(c+1);
    }catch(SQLException e){e.printStackTrace();return null;}
    }
    private ResultSet rs;
    private ResultSetMetaData rsmd;
    }

    [\CODE]

    ora a questa tabella vorrei aggiugere una colonna con un valore da me impostato per tutte le righe. come posso fare?

    ciao grazie credo di essere stato chiaro
    ciao

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

    Re: [Java] Aggiungere colonna ad una tabella!

    Originariamente inviato da fcorsa
    ora a questa tabella vorrei aggiugere una colonna con un valore da me impostato per tutte le righe. come posso fare?
    Ma vuoi aggiungerla "dinamicamente" cioè dopo che la tabella è già popolata e visualizzata?? O vuoi aggiungerla in modo fisso già da quando istanzi il table model??

    P.S. Ti suggerisco di cambiare nome alla tua classe: TableModel è già il nome della interfaccia in javax.swing.table. Non ci sono conflitti di per sè .... ma è meglio dargli comunque un nome più appropriato.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    ciao
    Vorrei aggiugere la colonna dopo che la tabella è stata pololata e poi visualizzarla con la colonna in più.

    cioè credo che si debba fare tra

    table = new JTable(model);
    ....cioè qui !
    scrollpane = new JScrollPane(table);


    per ora ho risolto con una query enorme che mi fa il calcolo internamente.

    meglio rimanere cosi o come avevo pensato in precedenza aggiungendo una colonna?

    comunque può essermi sempre comodo sapere come si fa.

    ciao grazie

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da fcorsa
    Vorrei aggiugere la colonna dopo che la tabella è stata pololata e poi visualizzarla con la colonna in più.
    Se vuoi che il table model già di per sè, sia "cablato" per fornire una colonna in più, basta che getColumnCount() restituisca 1 in più, che getColumnName() possa ritornare il nome in più (idem per la classe con getColumnClass() ), che getValueAt() restituisca il valore anche per quella colonna e che isCellEditable() accetti quel indice di colonna e se editabile, che setValueAt() la gestisca pure.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Non posso modificare TableModel perche la utilizzo per altre tabelle!

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da fcorsa
    Non posso modificare TableModel perche la utilizzo per altre tabelle!
    Beh ma la "magia" non esiste nell'informatica ..... come pensavi di farlo???

    O definisci un altro table model a parte, oppure modifichi quello che hai già per fare in modo che comunque "sappia" della possibile colonna in più ma la "esponga" magari solo se il model è costruito o settato con un certo parametro o "flag" che indica di usare la colonna in più.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    ok ti ringrazio

    credevo ci fosse un metodo specifico per questo tipo di operazioni tipo addColumn ,che fa altro.

    cmq potresti farmi vedere come modificarmi tablemodel per una colonna in più, perchè ho cercato di fare come dicevi ma non ci sono riuscito.

    ciao grazie

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da fcorsa
    credevo ci fosse un metodo specifico per questo tipo di operazioni tipo addColumn ,che fa altro.
    No. Se estendi AbstractTableModel non c'è una struttura dati predefinita!!!! Sei tu che eventualmente puoi/devi definirla come ti pare (Object[][], TuoRecord[], List<TuoRecord> ecc...). E nel tuo caso sopra addirittura siamo nel caso speciale in cui il tuo table model non ha nemmeno una struttura dati "fisica" in quanto semplicemente "chiede" i dati al ResultSet!!!

    DefaultTableModel ha ad esempio metodi come addColumn(), addRow() ecc... ma perché "ha" una sua struttura dati fisica interna (Vector di Vector di Object) che gestisce lui completamente e quindi offre tutti i metodi che hanno senso per espanderla, gestirla, ecc....

    Originariamente inviato da fcorsa
    cmq potresti farmi vedere come modificarmi tablemodel per una colonna in più, perchè ho cercato di fare come dicevi ma non ci sono riuscito.
    Volendo mettere una colonna opzionale in più al fondo che mostra una stringa uguale per tutte le righe:
    (molto abbozzato)

    codice:
    public class ResultSetTableModel extends AbstractTableModel {
        private ResultSet rs;
        private ResultSetMetaData rsmd;
        private int numeroColonne;
        private String valoreColonnaAggiuntiva;
    
        public ResultSetTableModel(ResultSet rs, String valoreColonnaAggiuntiva)
        throws SQLException {
            this.rs = rs;
            rsmd = rs.getMetaData();
            numeroColonne = rsmd.getColumnCount();
            this.valoreColonnaAggiuntiva = valoreColonnaAggiuntiva;
        }
    
        public int getColumnCount() {
            if (valoreColonnaAggiuntiva == null) {
                return numeroColonne;
            } else {
                return numeroColonne + 1;
            }
        }
    
        public Object getValueAt(int row, int column) {
            if (column == numeroColonne) {
                return valoreColonnaAggiuntiva;
            } else {
                // .... leggi dal record alla riga 'row' ....
    	}
        }
        
        // ..... altro ......
    }
    Solo se costruisci il table model passando una stringa non null hai la colonna in più.
    Insomma ... è solo questione di "logica" e qualche calcolo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    ok ti ringrazio per la tua disponibilità, proverò meglio questa soluzione.
    ciao

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.