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

    Aiuto per JTable

    Salve a tutti.

    Sto cercando per la prima volta di utilizzare una JTable ma mi trovo un poco in difficoltà

    E' possibile creare un JTable passando i dati uno ad uno con un ciclo for? :master:
    La JTable che devo creare dovrebbe caricare i dati dalle strutture dati più disparate (HashMap, ArrayList, vettori di Object, vettori di String, ...) e quindi mi risulta impossibile passarle un vettore Object "bello e pronto" per caricare i dati.

    Spero di essermi fatto capire almeno un pò!

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    378
    ciao, non sono espertissimo ma questa è l'ultima JTabel che ho usato...

    codice:
     
    
    rowsTabellaDispositivi= new Vector();
    columnsTabellaDispositivi = new Vector();
    String[] columnNames = {"Colonna01", "Colonna02", "Colonna03" };
    addColumnsTabellaDispositivi(columnNames);
    tabModelTabellaDispositivi = new DefaultTableModel();
    tabModelTabellaDispositivi.setDataVector(rowsTabellaDispositivi, columnsTabellaDispositivi);
    tableTabellaDispositivi = new JTable(tabModelTabellaDispositivi){
         // rende i campi della tabella non editabili
         public boolean isCellEditable(int row, int col) { return false; }
         };
    scrollPaneTabellaDispositivi = new JScrollPane(tableTabellaDispositivi);//ScrollPane
    tableTabellaDispositivi.setRowSelectionAllowed(false);
    // blocca il riordino delle etichette delle colonne
    tableTabellaDispositivi.getTableHeader().setReorderingAllowed(false);
    tableTabellaDispositivi.setRowSelectionAllowed( true );
    tableTabellaDispositivi.setColumnSelectionAllowed( false );

  3. #3
    Devi agire sul model della tabella:
    [list=1][*]puoi utilizzare il setDataVector() per modificare il contenuto di tutta la tabella:

    codice:
    JTable tabella = new JTable();
    DefaultTableModel model = new DefaultTableModel();
    model.setDataVector(record, nomiColonne); //record sarà il vettore contenente tutti i dati da inserire, nomiColonne un vettore contenente i nomi delle colonne
    tabella.setModel(model);
    [*]oppure se vuoi settare valori in celle specifiche puoi utilizzare il setValueAt():

    codice:
    model.setValueAt(valore, numeroRiga, numeroColonna);
    [*]se invece vuoi aggiungere righe alla tabella devi utilizzare l'addRow(), che accetta sia un array che un vettore di oggetti:

    codice:
    model.addRow(valori); //valori  è un vettore (o array) contenente tot valori quante sono le colonne della tabella
    [/list=1]

    Spero di esserti stato d'aiuto.

    ciao
    S-RDZN

    J2EE programmer

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Moderazione

    Ho corretto il titolo, come richiesto dal regolamento l'ho reso più uniforme.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Grazie per l'aiuto e chiedo scusa per il titolo non conforme al regolamento.

    Mi sono imbattuto ora in un'altro problema, problema che sembra a dir poco una ca**ata ma dal quale non riesco ad uscirne

    Ho creato una mia classe che estende AbstractTableModel in modo da poter inserire i dati nella JTable partendo da mie strutture dati ed in modo da poter differenziare il tipo di dato (String, number, boolean, ecc) tramite il metodo getColumnClass(int index), cosicche ad esempio i dati di tipo boolean vengano visualizzati nella JTable come JCheckBox.

    fin qua tutto ok, il problema è sorto quanto ho implementato la classe TableCellRenderer per modificare il colore delle righe delle JTable e il colore della riga selezionata in quel momento: le mie modifiche vengono applicate a quelle celle contenenti stringhe (e quindi visualizzate come JLabel) ma non alle celle contenente i dati di tipo boolean (e quindi visualizzate come JCheckBox)

    Nel main del programma ho assegnato il render alla JTable tramite il seguente codice:
    TableCellRenderer renderer = new CellRenderer(); (è la classe che implementa TableCellRenderer)
    table.setDefaultRenderer(Object.class, renderer); (table è la mia JTable)


    Dove sbaglio?? :master:
    Tra l'altro ho pure passato come parametro Object.class che dovrebbere comprendere qualsiasi componente dato che "tutto" deriva dalla classe Object...

  6. #6
    uppino

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.