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

    Dubbio su JTable e JPanel

    Salve! Vorrei permettere all'utente di modificare i dati della JTable e alla chiusura del JPanel salvare le modifiche, e solo allora riprendere l'esecuzione del programma, in pratica dovrei riuscire a rendere bloccante la JTable come i Dialog. E' possibile riuscirci senza utilizzare la gestione dei thread (in cui non sono per niente ferrato)...

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

    Re: Dubbio su JTable e JPanel

    Originariamente inviato da ramonrig
    Vorrei permettere all'utente di modificare i dati della JTable
    Qui bisogna vedere quale è il table model usato (se uno predefinito o uno tuo specifico). È infatti il table model, tramite il metodo isCellEditable, che "espone" al di fuori la informazione sulla editabilità (o no) di una cella.

    Originariamente inviato da ramonrig
    alla chiusura del JPanel salvare le modifiche
    Dire "chiusura del JPanel" è vago, i JPanel non si chiudono ... al massimo si possono "sganciare" (programmaticamente) dal contenitore in cui sono stati aggiunti.

    Originariamente inviato da ramonrig
    e solo allora riprendere l'esecuzione del programma, in pratica dovrei riuscire a rendere bloccante la JTable come i Dialog.
    Non può essere "bloccante" un componente. Appunto è Dialog/JDialog che può essere "modale".

    Originariamente inviato da ramonrig
    E' possibile riuscirci senza utilizzare la gestione dei thread
    I thread potrebbero anche non centrare ma dipende da cosa intendi per "salvare le modifiche". Se intendi salvare le modifiche es. su file e magari i dati nella tabella sono in quantità davvero enorme (oppure su un database), allora sarebbe necessario far eseguire il salvataggio in un thread apposito in modo da non tenere impegnato troppo a lungo il Event Dispatch Thread (quello della interfaccia utente) per non "congelare" tutta la tua interfaccia.
    Ma questo poi implicherebbe comunque altri dettagli da valutare.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Sono stato poco chiaro...

    Ho definito un mio table model in cui posso modificare i valori. Il problema è permettere all'utente di modificarli senza che il programma proceda con l'esecuzione, perchè devo visualizzare diverse tabelle editabili e poi salvare tutti i valori in un unica "matrice" riassuntiva, ma le visualizzazioni successive dipendono dai valori inseriti nella tabella iniziale; e i valori aggiornati mi servono per fare dei conti più avanti nell'esecuzione.

    Mi sono sbagliato, dovevo scrivere JFrame! L'utente quando ha finito di modificare i dati preme la crocetta e a quel punto salvo i dati nella "matrice" riassuntiva e visualizzo le altre tabelle fino all'ultima e a quel punto posso procedere con l'utilizzo dei dati.

    In Visual Basic NET è possibile fare un ciclo While in cui il programma attende eventi, e ho provato a riprodurre la stessa cosa in Java utilizzando il WindowListener e facendo l'override del metodo WindowClosing che modifica il valore di una variabile booleana, in questo modo:

    [CODE]

    while (showFrame == false)
    {
    showFrame = GetTableState();
    }

    [CODE\]

    dove GetTableState restituisce il valore della variabile booleana. Ma probabilmente la CPU è talmente impegnata nel ciclo While da non permettere l'accesso della variabile da altri metodi (è possibile che dipenda da Eclipse?). Quindi ho pensato di dover utilizzare i thread in modo da gestire in modo esclusivo l'accesso alla variabile (in partica un semaforo), ma forse c'è una soluzione diversa...

    La matrice finale sarà all'incirca di 60 * 10.

    Grazie.

  4. #4
    Non serve fare il ciclo while ti basta come hai fatto tu intercettare l'evento di chiusura e decidere se chiudere o fare altre operazioni esempio :
    codice:
    public void windowClosing(WindowEvent e) {
         if(GetTableState())
        {
          //salva i dati
        }else
       {
         //chiudi
       }
    }

  5. #5

    Re: Dubbio su JTable e JPanel

    Grazie...

    Ho risolto inserendo un semaforo nel ciclo While e uno in WindowClosing dove richiamo il metodo che cambia il valore alla variable booleana...

    Comunque provo anche il tuo codice...

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.