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

    stampare Set con JTable

    Ciao a tutti,
    vorrei visualizzare un contenuto di una Set<Libro> in una JTable. Il codice che ho elaborato è il seguente:
    public class VisualizzatoreRecord extends AbstractTableModel{

    private String[] columnNames = { "CODICE", "TITOLO", "ANNO"};



    private Set<Libro> lista;

    public VisualizzatoreRecord(Set<Libro> lista) {
    this.lista = lista;

    }


    public int getRowCount() {

    return this.lista.size();

    }

    public int getColumnCount() {

    return columnNames.length;
    }

    public String getColumnName(int column) {

    return columnNames[column];
    }

    public Class getColumnClass(int column) {
    switch (column) {
    case 0: return String.class;
    case 1: return String.class;
    case 2: return String.class;
    }

    return Object.class;
    }
    public boolean isCellEditable(int row, int column) {
    return false;
    }

    public String getValueAt(int row, int column) {

    for(Libro libro : lista){

    switch (column) {
    case 2: return libro.getCodice();
    case 1: return libro.getTitolo();
    case 0: return libro.getAnnoPubblicazione();
    }

    }

    return null;
    }

    }


    nella Set<Libro> che gli passo co sono 3 elementi ma mi stampa 3 volte il primo elemento della lista. Cosa sbaglio?
    grazie

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

    Re: stampare Set con JTable

    Originariamente inviato da super_slotty
    codice:
    public String getValueAt(int row, int column) {
    
    	for(Libro libro : lista){
    		
       switch (column) {
           case 2: return libro.getCodice();
           case 1: return libro.getTitolo();
           case 0: return libro.getAnnoPubblicazione(); 
       		}
    		
    	}
    
       return null;
    }
    Cosa sbaglio?
    Nel concetto. Non ha senso fare un for nel getValueAt(). Quando la tabella ha bisogno di visualizzare qualcosa invoca getValueAt() sul model e chiede "senti dammi il valore della cella con riga Y e colonna X". Punto.

    Ora, tuoi puoi accedere per indice ad un set??? La risposta è no. I set sono degli "insiemi" ... non delle liste.
    Pertanto è nel costruttore che, partendo dal Set, devi creare un List (es. ArrayList) e usare poi quello per tutto il resto nel model.

    E tra l'altro la soluzione banalissima c'è: uno dei costruttori di ArrayList riceve un Collection (e Set è un Collection!).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Scusami, potresti farmi qualche esempio di come può essere risolta questa cosa?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da super_slotty
    Scusami, potresti farmi qualche esempio di come può essere risolta questa cosa?
    codice:
    private List<Libro> lista;
    
    public VisualizzatoreRecord(Set<Libro> setLibri) {
        lista = new ArrayList<Libro>(setLibri);
    }
    Tutto qui. Ovviamente tutto il resto del model si deve basare sulla lista (getRowCount() ovviamente ma anche getValueAt(), in cui data la riga devi prendere il Libro al tal indice e poi in base alla colonna restituisci la proprietà voluta).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Ho fatto come mi hai detto tu ma mi dice che non può convertire una Set in una List. Ho fatto un metodo che trasforma la Set in un Array bidimenzionale e ora tutto funziona ma non credo sia "da manuale" come cosa...

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da super_slotty
    Ho fatto come mi hai detto tu ma mi dice che non può convertire una Set in una List.
    La variabile di istanza l'ho dichiarata List<Libro> e nel costruttore ho istanziato un ArrayList<Libro> al cui costruttore passo il Set<Libro>. Questo è tutto corretto, garantisco.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.