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

    Problema JTable, Table model e toString

    ciao!

    allora, sto cercando di riempire una JTable con un oggetto specifico.
    questo il table model:
    codice:
    import javax.swing.table.DefaultTableModel;
    
    public class MyTableModel extends DefaultTableModel {
    
        public MyTableModel(Object[][] data, String[] col) {
            super(data, col);
        }
    
        @Override
        public boolean isCellEditable(int row, int column) {
            return false;
        }
    }
    questo l'oggetto Record:
    codice:
    public class Record {
    
        private String nome;
        private String tipo;
        private String path;
    
        public Record(String nome, String tipo, String path) {
            this.nome = nome;
            this.tipo = tipo;
            this.path = path;
        }
    
        public String getNome() {
            return nome;
        }
    
        public void setNome(String nome) {
            this.nome = nome;
        }
    
        public String getTipo() {
            return tipo;
        }
    
        public void setTipo(String tipo) {
            this.tipo = tipo;
        }
    
        public String getPath() {
            return path;
        }
    
        public void setPath(String path) {
            this.path = path;
        }
    
        @Override
        public String toString() {
            return getNome() + " " + getTipo() + " " + getPath();
        }
    
    }
    questo il metodo che riempie la lista:
    codice:
        public ArrayList<ArrayList<Record>> scanDir(File dir) throws IOException {
            ArrayList<ArrayList<Record>> list = new ArrayList<>();
            File[] files = dir.listFiles();
            Arrays.sort(files, new MyComparator());
            for (File file : files) {
                ArrayList<Record> records = new ArrayList<>();
                Record record = new Record(file.getName(), new Tika().detect(file), file.getAbsolutePath());
                records.add(record);
                list.add(records);
            }
            return list;
        }
    questo come riempio la JTable:
    codice:
                        ArrayList<ArrayList<Record>> list = utils.scanDir(dir);
                        list.stream().forEach((map) -> {
                            ((MyTableModel) table.getModel()).addRow(map.toArray());
                        });
    quello che succede è che viene valorizzata solo la prima colonna.
    penso che il problema sia l'override delmetodo toString().
    ma come posso fare per mettere ogni campo nella colonna specifica??

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da fermat Visualizza il messaggio
    questo il metodo che riempie la lista:
    codice:
        public ArrayList<ArrayList<Record>> scanDir(File dir) throws IOException {
            ArrayList<ArrayList<Record>> list = new ArrayList<>();
            File[] files = dir.listFiles();
            Arrays.sort(files, new MyComparator());
            for (File file : files) {
                ArrayList<Record> records = new ArrayList<>();
                Record record = new Record(file.getName(), new Tika().detect(file), file.getAbsolutePath());
                records.add(record);
                list.add(records);
            }
            return list;
        }
    Mi sfugge ora (perché non so di più di cosa fai) perché devi avere un ArrayList che contiene N ArrayList in cui ciascuno ha 1 Record.
    Mi pare un tantino fumoso ....

    Quote Originariamente inviata da fermat Visualizza il messaggio
    codice:
                        ArrayList<ArrayList<Record>> list = utils.scanDir(dir);
                        list.stream().forEach((map) -> {
                            ((MyTableModel) table.getModel()).addRow(map.toArray());
                        });
    quello che succede è che viene valorizzata solo la prima colonna.
    penso che il problema sia l'override delmetodo toString().
    ma come posso fare per mettere ogni campo nella colonna specifica??
    No, non è tanto il toString.
    Quel 'map' è ciascun ArrayList<Record> nel ArrayList principale. E quindi map.toArray() ti dà un array di 1 elemento contenente 1 Record e quindi stai aggiungendo una riga con un singolo oggetto come "colonna".

    Se Record ha più proprietà e vuoi che ciascuna di queste vada in una colonna specifica, devi estrarre tu i dati e comporre una riga di N Object.


    P.S. comunque, ad occhio, mi sembra che stai facendo cose un po' fumose, con generics "complessi" e tirando in ballo stream/lambda di Java 8 che probabilmente rendono meno chiaro il tutto.
    Mio onesto parere, ovviamente.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    ok, seguendo quanto hai scritto ho modificato così:
    codice:
        public ArrayList<Record> scanDir(File dir) throws IOException {
            ArrayList<Record> list = new ArrayList<>();
            File[] files = dir.listFiles();
            Arrays.sort(files, new MyComparator());
            for (File file : files) {
                Record record = new Record(file.getName(), new Tika().detect(file), file.getAbsolutePath());
                list.add(record);
            }
            return list;
        }
    e poi:
    codice:
                        ArrayList<Record> list = utils.scanDir(dir);
                        for (int i = 0; i < list.size(); i++) {
                            String n = list.get(i).getNome();
                            String t = list.get(i).getTipo();
                            String p = list.get(i).getPath();
                            Object[] row = {n, t, p};
                            model.addRow(row);
                        }
    il toString() non mi è proprio servito.
    grazie!!!

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.