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

    JTable e l'inserimento dei dati

    Salve programmatori... ho un problema che provo a spiegarvi...

    Ho due finestre non direttamente collegate tra loro.... nella prima fornisco dei dati.... e nella seconda li visualizzo tramite un JTable.

    Bene ... il problema è che non è certo quando i dati nella prima finestra vengono immessi dall'utente e pertanto nella seconda finestra (quella con la tabella) non so come aggiornare la stessa tabella. Ho pensato di implementare un timer e verificare ogni secondo se l'ArrayList di dati contiene valori... ma mi sembra stilisticamente una schifezza incredibile... (e comunque avrebbe un ritardo... dovuto alla scadenza del secondo).

    Adesso a voi chiedo... esiste (e sono certo che esista) un sistema migliore per fare ciò che vorrei...???
    (riassumendo potrei dire che voglio visualizzare la tabella solo quando i dati esistono realmente)

    il lupo perde il pelo ma non il vizio!
    http://www.pateam.eu
    http://pateam.altervista.org

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da miticogilles Visualizza il messaggio
    Ho pensato di implementare un timer e verificare ogni secondo se l'ArrayList di dati contiene valori... ma mi sembra stilisticamente una schifezza incredibile...
    Appunto ....

    Quote Originariamente inviata da miticogilles Visualizza il messaggio
    Adesso a voi chiedo... esiste (e sono certo che esista) un sistema migliore per fare ciò che vorrei...???
    (riassumendo potrei dire che voglio visualizzare la tabella solo quando i dati esistono realmente)
    I dati come sono inseriti? Una riga per volta? E vuoi che la tabella si aggiorni ad ogni inserimento di riga o quando hai tutte le righe (o un buon/determinato numero)?

    Comunque, dico in generale, a te basta "parlare" con il TableModel. Non so quale hai usato ma basta che esso offra una qualche forma di "add". DefaultTableModel ha addRow, se hai implementato un tuo table model "custom", devi offrire tu una simile funzionalità.
    Tutto qui.
    Ultima modifica di andbin; 17-02-2014 a 16:27
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,325
    La prima finestra dovrebbe avere accesso al TableModel che gestisce la tabella della seconda. In questo modo, ogni variazione (inserimento / modifica / cancellazione) fatta, viene automaticamente riflessa dalla JTable.

    JTable funziona secondo il paradigma MVC. I dati vengono gestiti da un Model (il TableModel), la JTable è il View (cioè ci pensa lei a visualizzare i dati), mentre la tua prima finestra può tranquillamente fungere da Controller e modificare il Model secondo le esigenze dell'utente.

    Tutto sta nello scrivere correttamente il TableModel; poi tutto dipende da come hai progettato l'infrastruttura del tuo programma (cioè, chi istanzia cosa, in quali momenti ecc), in modo da fornire i dati a chi ne ha bisogno (quindi, il TableModel dovrebbe essere creato "per primo" e reso visibile alle due finestre).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Quote Originariamente inviata da andbin Visualizza il messaggio
    I dati come sono inseriti? Una riga per volta? E vuoi che la tabella si aggiorni ad ogni inserimento di riga o quando hai tutte le righe (o un buon/determinato numero)?
    devo aggiornare la tabella quando tutti i dati sono presenti... del resto è una finestra di riepilogo... non ho motivo che vengano aggiunte righe a distanza di tempo.

    il lupo perde il pelo ma non il vizio!
    http://www.pateam.eu
    http://pateam.altervista.org

  5. #5
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    La prima finestra dovrebbe avere accesso al TableModel che gestisce la tabella della seconda. In questo modo, ogni variazione (inserimento / modifica / cancellazione) fatta, viene automaticamente riflessa dalla JTable.

    JTable funziona secondo il paradigma MVC. I dati vengono gestiti da un Model (il TableModel), la JTable è il View (cioè ci pensa lei a visualizzare i dati), mentre la tua prima finestra può tranquillamente fungere da Controller e modificare il Model secondo le esigenze dell'utente.
    il problema di questo approccio (che comunque non fa una piega) è che la prima finestra non necessariamente deve avere a che fare con quella della tabella perchè sono gestite in modo completamente autonomo tranne quello che io chiamo "il motore dell'applicazione".. A questo punto potrei mettere TableModel nel "motore" .. in modo che sia condiviso (però mi sembra un usare più del dovuto l'applicazione... proprio perchè non è detto che serva poi utilizzarlo)... spero di essermi spiegato. Ad ogni modo provo... grazie

    il lupo perde il pelo ma non il vizio!
    http://www.pateam.eu
    http://pateam.altervista.org

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,325
    Beh... il fatto che "non necessariamente" verrà utilizzato non ha nulla a che fare con la struttura del programma. E' lecito che sia l'utente a decidere cosa fare (quali funzioni usare del programma, quali finestre aprire, ecc), ma il programma deve prevedere tutto. E prevedere tutto significa fornire a tutti i componenti i dati per funzionare correttamente, indipendentemente dal fatto che questi componenti vengano usati dall'utente o meno.

    Poi si può discutere sulle "tempistiche" (quando creare determinati oggetti: subito, solo se necessario, solo in particolari condizioni, ecc.), ma anche questo dipende dalla tua volontà (o da specifiche richieste di implementazione). Io ed andbin ti abbiamo indirizzato sul "come" fare... le tempistiche di creazione dei componenti e i modi di comunicazione tra di essi sono a tua discrezione.


    Ciao.
    Ultima modifica di LeleFT; 17-02-2014 a 17:01
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da miticogilles Visualizza il messaggio
    il problema di questo approccio (che comunque non fa una piega) è che la prima finestra non necessariamente deve avere a che fare con quella della tabella perchè sono gestite in modo completamente autonomo tranne quello che io chiamo "il motore dell'applicazione"..
    Non necessariamente la finestra di input deve "sapere" direttamente del TableModel. Puoi anche disaccoppiare il tutto con una interfaccia.

    La tua finestra di input potrebbe ricevere (in qualunque modo ti sembra utile/appropriato) un oggetto di tipo interfaccia es. TableUpdater con un metodo es. setTableData(List<TuoTipo>) o setTableData(Object[][]) o ancora un altro tipo di metodo a seconda di come sono tipizzati/strutturati i dati.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    andbin , LeleFT..... grazie grazie.. grazie e ancora grazie... mi avete messo sulla giusta strada mentre io ammetto che stavo vagando in una stradina che mi avrebbe portato dal lupo di capuccetto rosso.
    Per la cronaca ho passato il DefaultTableModel alla prima finestra... e con addRow aggiungo le righe... (pensavo a cose esageratamente complesse... invece..))))
    Ultima modifica di miticogilles; 17-02-2014 a 18:33

    il lupo perde il pelo ma non il vizio!
    http://www.pateam.eu
    http://pateam.altervista.org

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.