Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
In tre giorni a Las Vegas Oracle ha presentato agenti che eseguono il lavoro, l'alleanza con OpenAI e un cloud aperto agli acceleratori di tutti. Ma i clienti europei chiedono garanzie prima ancora delle funzionalità
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
Fino a 740 km WLTP con la batteria da 97,2 kWh, sospensioni che leggono la strada con una telecamera e un abitacolo da salotto parigino. La nuova DS N°7 raccoglie l'eredità della DS 7 e la porta, per la prima volta, nel mondo 100% elettrico. Ecco come è fatta, cosa offre e quanto costa.
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più
Abbiamo provato Samsung Galaxy Tab S12 Ultra nella versione 12 GB + 256 GB con tastiera, e il risultato è un tablet che in questa configurazione si comporta come un notebook con la fluidità tipica di Android. Spessore di 5,1 mm, display Dynamic AMOLED 2X da 14,6 pollici, MediaTek Dimensity 9500 e un software senza incertezze compongono un prodotto di vertice, con prezzi da 1.539 euro, frenato solo da un'autonomia nella parte bassa del confronto
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 26-04-2011, 23: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, 13: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, 21: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, 21: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, 22: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, 14: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, 15: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, 21: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, 22: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, 10: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, 14: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, 14: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, 15: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, 17: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, 18: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, 18: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, 19: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, 19: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, 10: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, 12: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 12:15.
alfo1 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura) Hyundai IONIQ 5 N, l'elettrica che finge di esse...
CES Unveiled Milan, l'IA diventa tecnologia fondativa e il commercio torna centrale CES Unveiled Milan, l'IA diventa tecnologia fond...
Chrome, meno tab switching con la nuova ...
L'IA agentica spopola fra le aziende, ma...
ASUS UGen300 arriva in Italia a 299 euro...
Iliad aggiorna la gamma di offerte per I...
Stop ai social per i minori, perché Brux...
Google Chrome integra Gemini in Enhanced...
Meta lancia Waddle World e Style Sketch,...
Jensen Huang nella rete dello spionaggio...
Valve non vieterà i giochi creati...
3 milioni di euro di redditi non dichiar...
XREAL AURA: gli occhiali XR via cavo con...
E-Plato, 3 milioni per sviluppare Socrat...
Alexa Home Map trasforma la casa in una ...
Due magneti grandi come un seme di sesam...
Il boss di Instagram avverte: la rabbia ...
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: 20:10.


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