Visualizzazione dei risultati da 1 a 4 su 4

Discussione: DefaultTableModel

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    137

    DefaultTableModel

    Vorrei modificare questa classe in modo che invece della classe AbstractListModel mi implemeti la classe DefaultTableModel e mi inserisce delle righe ad una tabella invece di inserire i valori che legge in una lista.
    il problema è implementare la funzione fireIntervalAdded(readfile.this, last + 1, current);

    Mi potete aiutare?

    public class readfile extends AbstractListModel {

    private static Logger logger =
    Logger.getLogger(readfile.class.getName());
    private RandomAccessFile lineCounterFile;
    private List linePositions =
    Collections.synchronizedList(new ArrayList());
    private RandomAccessFile readerFile;
    public readfile(File file) throws FileNotFoundException {
    this.lineCounterFile = new RandomAccessFile(file, "r");
    this.readerFile = new RandomAccessFile(file, "r");
    Runnable lineCounterThread = new Runnable() {

    public void run() {
    try {
    String line;
    linePositions.add( new Long(0) );
    while ((line = lineCounterFile.readLine()) != null) {
    linePositions.add(Long.toString(lineCounterFile.ge tFilePointer()));
    Thread.yield();
    }
    linePositions.remove(linePositions.size()-1);
    } catch (IOException ex) {
    logger.log(Level.SEVERE, "", ex);
    }

    }
    };
    Executors.newSingleThreadExecutor().submit(lineCou nterThread);

    Runnable firer = new Runnable() {

    public void run() {
    int last = -1;
    int current = linePositions.size()-1;
    if (last < current) {
    fireIntervalAdded(readfile.this, last + 1, current);
    last = current;
    }
    }
    };

    Executors.newScheduledThreadPool(1).scheduleAtFixe dRate(firer, 2, 500,
    TimeUnit.MILLISECONDS);
    }

    public int getSize() {
    return linePositions.size();
    }

    public Object getElementAt(int index) {
    try {
    readerFile.seek(Long.parseLong(""+linePositions.ge t(index)));
    return readerFile.readLine();
    } catch (IOException ex) {
    logger.log(Level.SEVERE, "", ex);
    return null;
    }
    }
    }

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

    Re: DefaultTableModel

    Originariamente inviato da Macgiglio
    Vorrei modificare questa classe in modo che invece della classe AbstractListModel mi implemeti la classe DefaultTableModel e mi inserisce delle righe ad una tabella invece di inserire i valori che legge in una lista.
    DefaultTableModel è un table model che ha già una sua struttura interna (un Vector di Vector di Object).
    Quindi a meno che tu debba alterare il comportamento di isCellEditable() (o forse poco altro es. getColumnClass() ... bisogna vedere), non ci sarebbe bisogno di estendere DefaultTableModel!!! Semplicemente lo istanzi ed aggiungi/rimuovi/setti/leggi le righe come ti pare e piace!!!
    Ha già lui una struttura, come detto sopra, espandibile/ridimensionabile.

    Originariamente inviato da Macgiglio
    il problema è implementare la funzione fireIntervalAdded(readfile.this, last + 1, current);
    Non devi implementare un bel nulla per fireIntervalAdded .... è già implementato e la notifica la invia già lui quando es. aggiungi una riga con addRow().

    Originariamente inviato da Macgiglio
    Mi potete aiutare?
    Quello che ti potrebbe davvero aiutare è fare un piccolo sforzo per comprendere davvero bene i "table model".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    137
    Ti spiego la cosa che non capisco...Ora visualizzo la stringa di uscita da fuori facendo qualcocosa del genere

    fileList = new JList();
    fileList.setModel(new readfile(new File(Percorso)));
    ...
    ...
    ..
    JScrollPane jScroll= new JScrollPane();
    jScrollPane.setViewportView(fileList);

    quello che vorrei fare ora è di visualizzare i dati letti in una jTable aggiungendo una riga per ogni riga di testo letta.Ho creato una JTable fuori dalla classe cercando di inserire i dati di fileList, ma non visualizza niente(penso perche visto che si utilizzano i Thread,fileList si incrementa pianpiano). Pensavo quindi che la potevo risolvere creando il Tablemodel e fare addRow() direttamente nella classe che ti ho postato(e creare poi fuori una JTable con quel TableModel)...ma come utilizzarlo fuori visto che alla fine ottengo solo una JList dalla classe?

    Non so se mi sono riuscito a fr capire. Sono alle prime armi con java ma mi sto affezionando molto....quindi scusami se faccio domande per te forse banali....

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    137
    Suggerimenti?

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.