Torna indietro   Hardware Upgrade Forum > Software > Programmazione

iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
C'è tanta sostanza nel nuovo smartphone della Mela dedicato ai creator digitali. Nuovo telaio in alluminio, sistema di raffreddamento vapor chamber e tre fotocamere da 48 megapixel: non è un semplice smartphone, ma uno studio di produzione digitale on-the-go
Intel Panther Lake: i processori per i notebook del 2026
Intel Panther Lake: i processori per i notebook del 2026
Panther Lake è il nome in codice della prossima generazione di processori Intel Core Ultra, che vedremo al debutto da inizio 2026 nei notebook e nei sistemi desktop più compatti. Nuovi core, nuove GPU e soprattutto una struttura a tile che vede per la prima volta l'utilizzo della tecnologia produttiva Intel 18A: tanta potenza in più, ma senza perdere in efficienza
Intel Xeon 6+: è tempo di Clearwater Forest
Intel Xeon 6+: è tempo di Clearwater Forest
Intel ha annunciato la prossima generazione di processori Xeon dotati di E-Core, quelli per la massima efficienza energetica e densità di elaborazione. Grazie al processo produttivo Intel 18A, i core passano a un massimo di 288 per ogni socket, con aumento della potenza di calcolo e dell'efficienza complessiva.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 26-04-2011, 22:48   #1
alfo1
Junior Member
 
Iscritto dal: Jul 2010
Messaggi: 16
[JAVA NETBEANS] Riempire dinamicamente Jtable

Salve ragazzi avrei un problema con il riempimento dinamico di una Jtable.. Qualcuno mi da un aiuto per riempire una Jtable con per esempio nella prima colonna i nomi dei file presi in una determinata cartella? Grazie mille
alfo1 è offline   Rispondi citando il messaggio o parte di esso
Old 27-04-2011, 12:49   #2
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Il modo più comprensibile per manipolare una JTable è probabilmente quello di passare per i "micrometodi" del suo modello, supponendo che sia un DefaultTableModel (il modello standard).

JTable table = new JTable(0, 0);//tabella vuota
DefaultTableModel model = (DefaultTableModel) table.getModel();

Aggiungo una colonna:

model.addColumn("Nome del file");

Adesso la tabella ha una colonna e zero righe.

Per aggiungere una riga in fondo alla tabella posso dire:

model.setRowCount(model.getRowCount() + 1);

Per impostare il valore dell'ultima riga posso dire:

model.setValueAt("valore", model.getRowCount() - 1, 0);

cioè valore, indice di riga, indice di colonna.

Ne consegue che, data una cartella, volendo mostrare i nomi dei file in una tabella potrei dire:

Codice:
package test;

import java.io.File;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class Main implements Runnable {

    public static void main(String[] args) throws IOException {
        java.awt.EventQueue.invokeLater(new Main());
    }

    public void run() {
        File folder = new File(System.getProperty("user.home"));
        File[] files = folder.listFiles();
        
        JTable table = new JTable(0, 0);//tabella "vuota"
        DefaultTableModel model = (DefaultTableModel) table.getModel();
        model.addColumn("Nome del File");
        
        for (int i = 0; i < files.length; i++) {
            File file = files[i];
            model.setRowCount(model.getRowCount() + 1);
            model.setValueAt(file.getName(), model.getRowCount() - 1, 0);
        }
        
        JScrollPane tableScroller = new JScrollPane(table);
        JFrame frame = new JFrame("Test");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.add(tableScroller);
        frame.pack();
        frame.setVisible(true);
    }
    
}
Non è il modo più efficiente di farlo perchè esistono metodi che permettono di riempire la tabella in un colpo solo anzichè avere N invocazioni di metodo ma è sempre meglio essere certi prima di essere rapidi.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 27-04-2011, 20:11   #3
alfo1
Junior Member
 
Iscritto dal: Jul 2010
Messaggi: 16
Il problema e' il fatto di lavorare con netbeans e cosi la tabella non viene aggiornata.. Come risolvo?
alfo1 è offline   Rispondi citando il messaggio o parte di esso
Old 27-04-2011, 20:45   #4
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
L'editor visuale dichiara la tabella come campo di istanza. Se non l'hai rinominata sarà qualcosa tipo "jTable1". Dopo l'initComponents, invocato nel costruttore, con quel "jTable1" puoi fare quello che preferisci, incluso lavorare col modello come indicato. Ad esempio puoi dire:

Codice:
costruttore() {
    initComponents();
    DefaultTableModel model = new DefaultTableModel(0, 0);
    jTable1.setModel(model);
    model.addColumn("pippo");
    //eccetera
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 27-04-2011, 21:08   #5
alfo1
Junior Member
 
Iscritto dal: Jul 2010
Messaggi: 16
Con l ultimo suggerimento ha funzionato Grazie mille.. Ora provero' a riempire le altre colonne ma sono gia che avro' bisogno di aiuto e quindi ti richiedero' le cose
alfo1 è offline   Rispondi citando il messaggio o parte di esso
Old 28-04-2011, 13:00   #6
alfo1
Junior Member
 
Iscritto dal: Jul 2010
Messaggi: 16
Sulla gestione di un Jtree sai dirmi qualcosa?
alfo1 è offline   Rispondi citando il messaggio o parte di esso
Old 28-04-2011, 14:37   #7
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Be', non mi sembra il luogo per una dissertazione di carattere generale . Hai un'esigenza specifica al riguardo?
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 28-04-2011, 20:16   #8
alfo1
Junior Member
 
Iscritto dal: Jul 2010
Messaggi: 16
Avere la gerarchia delle cartelle del file system nell albero
alfo1 è offline   Rispondi citando il messaggio o parte di esso
Old 28-04-2011, 21:14   #9
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Anche lì puoi sfruttare il fatto che un jtree predefinito usa come modello un DefaultTreeModel (se butti l'occhio alla doc vedrai che ha un tot di metodi utili) e lavora su nodi di tipo DefaultMutableTreeNode.

Nota che quello che è mostrato in un JTree predefinito è l'invocazione del metodo toString sullo userObject di ciascun DefaultMutableTreeNode, quindi se usi un file come userObject dei tuoi nodi vedrai il percorso completo del file, se usi solo il nome vedi solo il nome. Di norma conviene usare un wrapper per lo user object, tipo:

Codice:
public class FileWrapper {
    public final File file;
    public FileWrapper(File file) { this.file = file; }
    public String toString() { return file.getName(); }
}
Perchè ti permette di associare ai nodi, oltre al valore vero e prorpio, altri dati, magari per il rendering.

Qui trovi degli esempio d'uso di JTree

http://www.apl.jhu.edu/~hall/java/Sw...ial-JTree.html
http://www.java2s.com/Code/Java/Swin...reeexample.htm
http://java.sun.com/docs/books/tutor...ents/tree.html
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 29-04-2011, 09:40   #10
alfo1
Junior Member
 
Iscritto dal: Jul 2010
Messaggi: 16
Ho guardato i tuoi link e sono utili solo che ho problemi nell'implementazione in netbeans
alfo1 è offline   Rispondi citando il messaggio o parte di esso
Old 29-04-2011, 13:05   #11
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Con netbeans crei l'albero e lo piazzi nella gui. Dopodichè lo maneggi come fai con la tabella, solo che per l'albero usi DefaultTreeModel. Netbeans ti crea il campo - in ipotesi - jTree1. Nell'initComponents lo inizializza e lo inserisce nella gui dove gli hai detto di metterlo. Subito dopo l'initComponents puoi fargli di tutto e di più. Ad esempio, dovendo caricare le cartelle che stanno in un certo file puoi dire:

Codice:
...costruttore() {
    initComponents();
    File rootFile = qualche cartella
    DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode(rootFile);
    for(File f : rootFile.listFiles()) {
        if(f.isDirectory()) rootNode.add(new DefaultMutableTreeNode(f)));
    }
    DefaultTreeModel model = new DefaultTreeModel(root);
    jTree1.setModel(model);
Puoi farlo nel costruttore ma puoi anche farlo in un metodo che invochi quando è premuto un pulsante: il campo è sempre quello, l'inizializzazione la fa il codice creato da netbeans, tu devi solo "manipolarlo".
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 29-04-2011, 13:54   #12
alfo1
Junior Member
 
Iscritto dal: Jul 2010
Messaggi: 16
il problema e' che in netbeans l albero vuole un paramentro in ingresso come root all'inizio quando viene inizializzato; ed e' li lo scoglio che non riesco a superare
alfo1 è offline   Rispondi citando il messaggio o parte di esso
Old 29-04-2011, 14:24   #13
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Il tuo netbeans è diverso dal mio .

Apri la finestra in modalità "design", trascini un "Tree" dalla finestra "Palette" sezione SwingControls nel contenitore dove vuoi metterlo. Appare un albero con un po' di voci (JTree, colors, sports, food). Vai in source, costruttore, dopo l'init components puoi mettere quello che preferisci.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 29-04-2011, 16:45   #14
alfo1
Junior Member
 
Iscritto dal: Jul 2010
Messaggi: 16
:i infatti ora funziona Ho un ultima domanda, ma per richiamare la visualizzazione delle e file nell'albero ricorsivamente come posso fare?
alfo1 è offline   Rispondi citando il messaggio o parte di esso
Old 29-04-2011, 17:31   #15
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
La questione è un po' lunga da spiegare ma alla fine basterebbe un metodo ricorsivo che attraversi le cartelle (File) e richieda in più un DefaultMutableTreeNode come argomento.

Il fatto è che non è buona idea perchè un filesystem può richiedere diverso tempo (secondi o minuti) per poter essere attraversato completamente, il che ammazzerebbe i tempi di risposta della tua gui.

Se è necessario che il tuo programma abbia a disposizione l'albero completo del filesystem allora devi separare la scansione dalla pubblicazione dei nodi nell'albero: la prima la fai con un pool di thread in background, la seconda con l'edt (il thread che maneggia le gui awt/swing).

Se, come è più probabile, non ti interessa l'albero completo ma solo la parte attualmente visibile all'utente allora carichi solo le radici e quando l'utente espande una cartella, carichi i file/cartelle che quella contiene.

Per intercettare l'espansione del nodo puoi usare il metodo addTreeExpansionListener o il metodo addTreeWillExpandListener: a te interessa più il secondo perchè devi creare i nodi prima che la cartella sia "aperta".

L'ascoltatore di eventi che registri col metodo predetto avrà nel suo metodo di gestione un procedimento così composto (ad esempio):

1. prendi il file del nodo-cartella
2. carica la lista L di file contenuti in quella cartella (file.listFiles())
3. prendi tutti i figli N del nodo-cartella
4. per ogni nodo di N che non ha una controparte in L (file spostato o rimosso o rinominato) -> elimina il nodo dal nodo-cartella
5. per ogni file di L che non ha una controparte in N (nuovo file o primo caricamento) -> aggiungi un nuovo nodo al nodo-cartella

Inserimenti e rimozioni si fanno passando per il modello dell'albero, nel presupposto che sia un DefaultTreeModel:

DefaultTreeModel model = (DefaultTreeModel) jTree1.getModel();

4. rimozione

model.removeNodeFromParent(il nodo da rimuovere)

5. inserimento

DefaultMutableTreeNode nuovo = new DefaultMutableTreeNode(il file);
model.insertNodeInto(nuovo, il nodo della cartella)

E' necessario passare per il modello (tree.getModel()) altrimenti la vista (il JTree) non riflette le mutazioni che potresti applicare direttamente ai nodi (puoi aggiungere o rimuovere nodi passando direttamente per DefaultMutableTreeNode ma se non avverti il modello il JTree resterà tale e quale).
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 29-04-2011, 17:42   #16
alfo1
Junior Member
 
Iscritto dal: Jul 2010
Messaggi: 16
mmm... Non sembra difficile da implementare... Devo provare e sperare di riuscire senza fare casini.. No esistono tutorial o spezzoni di codice?
alfo1 è offline   Rispondi citando il messaggio o parte di esso
Old 29-04-2011, 18:04   #17
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
C'è un esempio completo che centra in pieno il bersaglio:

http://www.java2s.com/Code/Java/Swin...aJTreeview.htm
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 29-04-2011, 18:29   #18
alfo1
Junior Member
 
Iscritto dal: Jul 2010
Messaggi: 16
Ma scrivendo il codice l'albero resta con i nomi di default
alfo1 è offline   Rispondi citando il messaggio o parte di esso
Old 30-04-2011, 09:36   #19
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
So che non si risponde ad una domanda con un'altra domanda, quindi ne faccio due: cosa intendi per nomi di default e di codice parliamo?
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 30-04-2011, 11:00   #20
alfo1
Junior Member
 
Iscritto dal: Jul 2010
Messaggi: 16
allora se in designe faccio click di dx sull labero e vado in customize code nell'inizializzazione dell albero devo mettere quale sara' il root giusto? Quindi lo devo dichiare prima dell'init non dopo

/* Ho risolto il problema qui sopra.. l''atro probelam resta il fatto di navigare nel Jtree, ho problemi a richiamarlo ricorsivamente */

Ultima modifica di alfo1 : 30-04-2011 alle 11:15.
alfo1 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Intel Panther Lake: i processori per i notebook del 2026 Intel Panther Lake: i processori per i notebook ...
Intel Xeon 6+: è tempo di Clearwater Forest Intel Xeon 6+: è tempo di Clearwater Fore...
4K a 160Hz o Full HD a 320Hz? Titan Army P2712V, a un prezzo molto basso 4K a 160Hz o Full HD a 320Hz? Titan Army P2712V,...
Recensione Google Pixel Watch 4: basta sollevarlo e si ha Gemini sempre al polso Recensione Google Pixel Watch 4: basta sollevarl...
2 minuti per vedere le 27 offerte imperd...
Ray-Ban Meta Display: tecnologia sorpren...
Un mini PC a prezzo stracciato, non cerc...
Al via i coupon nascosti di ottobre: qua...
Ferrari Elettrica si aggiorna solo in of...
Doppio sconto sugli smartphone top Xiaom...
Samsung è sempre più prota...
ChatGPT ha pregiudizi politici? Ecco cos...
Un solo iPhone rubato ha portato alla sc...
Xiaomi 17 Ultra sta arrivando: ecco come...
Il Motorola Edge 70 non ha più se...
Alcuni Galaxy S26 utilizzeranno il chip ...
Amazon, ecco i super sconti del weekend:...
Scovare un bug di sicurezza sui disposit...
Offerta Amazon su NordVPN: proteggi 10 d...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 08:58.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v