Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Le webcam Insta360 Link 2 Pro e Link 2C Pro sono una proposta di fascia alta per chi cerca qualità 4K e tracciamento automatico del soggetto senza ricorrere a configurazioni complesse. Entrambi i modelli condividono sensore, ottiche e funzionalità audio avanzate, differenziandosi per il sistema di tracciamento: gimbal a due assi sul modello Link 2 Pro, soluzione digitale sul 2C Pro
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70 porta il concetto di smartphone ultrasottile su un terreno più concreto e accessibile: abbina uno spessore sotto i 6 mm a una batteria di capacità relativamente elevata, un display pOLED da 6,7 pollici e un comparto fotografico triplo da 50 MP. Non punta ai record di potenza, ma si configura come alternativa più pragmatica rispetto ai modelli sottili più costosi di Samsung e Apple
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Sono molte le novità che ASUS ha scelto di presentare al CES 2026 di Las Vegas, partendo da una gamma di soluzioni NUC con varie opzioni di processore passando sino agli schermi gaming con tecnologia OLED. Il tutto senza dimenticare le periferiche di input della gamma ROG e le soluzioni legate alla connettività domestica
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


Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Le novità MSI del 2026 per i videogiocatori Le novità MSI del 2026 per i videogiocato...
Amazon aggiorna le offerte anche a metà ...
Trump elogia Microsoft: accordi con le B...
L'Unione Europea scommette sul software ...
In Cina parte la prima linea per batteri...
Un benchmark che mette in difficolt&agra...
OnePlus nella bufera a Taiwan: emesso ma...
Arriva Hyper Hosting, la nuova offerta ...
Steam non si ferma più: nuovo rec...
Venezuela, altro che petrolio: il tesoro...
EcoFlow DELTA Pro Ultra X: potenza e rap...
SK hynix: un nuovo impianto per produrre...
Facebook, cresce il furto di password co...
Tesla lancia la nuova Model Y con 7 post...
NVIDIA smentisce: nessun pagamento antic...
Il prototipo del razzo spaziale riutiliz...
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:38.


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