Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175

    aggiornare oggetti di un frame tramite un altro frame

    Allora, ho due frame Paziente.java e arItem.java, in Paziente.Java c'è
    una lista di oggetti lstMal e un bottone arMal che apre una nuova
    istanza di arItem.java.
    Quando apro arItem.java posso inserire dei valori nel DB che
    dovrebbero poi essere visualizzati in Paziente.java, più precisamente
    nella lista lstMal.

    Fin'ora non c'è problema, l'unico problema è che mi servirebbe un
    metodo per aggiornare direttamente lstMal, in quanto ora lo devo fare
    a mano, altrimenti anche dopo l'aggiornamento del DB le modifiche non
    si rifletteranno su lstMal. Ho provato una cosa molto semplice, ovvero
    in arItem.java, subito dopo che viene inserito un oggetto nel DB:
    codice:
    private void btnAggiungiActionPerformed(java.awt.event.ActionEvent evt) {
                int ins = mdbc.inviaQueryUpdate("BEGIN add_sinric(12, 5);END;");
                // nessun problema la procedura è chiamata e l'inserimeto effettuato
    
                // cerco di rendere invisibile e subito dopo visibile lstMal per aggiornare
                Paziente.lstMal.setVisible(false);
                // ^ errore: non-static variable lstMal can be referenced from a static context
    
    }
    Come posso risolvere??? in Paziente.java ho dichiarato lstMal public
    altrimenti con private non potevo proprio accederci.

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    codice:
    Paziente.lstMal
    ti da errore perchè non essendo la variabile lstMal statica, non puoi accedervi in questo modo.
    Devi avere un riferimento ad una classe Paziente istanziata.
    codice:
    Paziente p = new Paziente();
    p.varNonStatica; //OK
    p.metodoNonStatico(); //OK
    Paziente.varNonStatica; //ERRORE
    Paziente.metodoNonStatico(); //ERRORE
    Paziente.varStatica; //OK
    Paziente.metodoStatico(); //OK
    Io comunque lascerei lstMal privata, poi in Paziente metterei un metodo (pubblico) che mi fa l'aggiornamento di questa lstMal.
    Passi all'istanza di arItem un riferimento all'istanza di Paziente e poi chiami questo metodo.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175
    Per questo OK, però io non posso instanziare nuovamente paziente.

    cioè io in Paziente.java ho questo metodo:
    codice:
    public void reloadJL(String t) {
                    if(t.equals("mal"))
                        this.lstMalMod.addElement("aaaaaa");
                        // ...
    }
    Ora mi serve un modo per richiamare questo metodo da arItem.java, evitando l'errore precedente, però non posso farlo come:
    codice:
    Paziente p = new Paziente();
    // ...
    p.reloadJL("mal");
    // ...
    Aiuto....

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Se nella classe arItem non hai un handler/referenza all'oggetto Paziente che vuoi aggiornare, ciccia, ti attacchi. Chiaramente nessuno sta dicendo che devi istanziare un nuovo Paziente, anche perché non servirebbe al tuo scopo. Quel che devi fare è passare Paziente al costruttore di arItem in modo che sia visibile in arItem

    ossia arItem sarà qualcosa del genere
    codice:
    class arItem extends.... implements... {
      private Paziente paziente;
      ...
      
      public arItem(Paziente paziente, ...) {
        ...
        this.paziente = paziente;
        ...
      }
      ...
    }
    A quel punto su paziente ci fai tutto quello che i suoi metodi ti consentono di fare
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175
    se nell'altra discussione modificavamo il main passandoci un parametro tra doppi apici, stavolta cosa devo passarci:
    codice:
        public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new arItem().setVisible(true);
                }
            });
        }
    PS: non è voglia di sintesi all'ennesima potenza, ma è NetBeans che me lo compatta così...

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    modifica la classe arItem come nella risposta precedente

    e ammesso che il brano di codice che hai appena postato sia contenuto in Paziente

    codice:
    public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new arItem(this).setVisible(true);
                }
            });
        }
    Altrimenti modifica tutte le classi che necessitano essere modificate in modo da avere sempre una referenza all'oggetto Paziente su cui stai operando.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175
    io ho modificato arItam.java come tu mi suggerivi due risposte fà

    codice:
    class arItem extends.... implements... {
      private Paziente paziente;
      ...
      
      public arItem(Paziente paziente, ...) {
        ...
        this.paziente = paziente;
        ...
      }
      ...
    }
    modificato ciò, in arItem.java la parte di codice del main andava modificato:
    codice:
        public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new arItem().setVisible(true);   //<-- cannot find symbol, constructor arItem()
                }
            });
        }
    Per ora io nn ho toccato ancora Paziente.java, homodificato come mi hai detto solo arITem.java.

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    hai visto che passo "this" al costruttore (l'avevo messo in neretto apposta)?
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175
    sì, avevo provato anche con this, ma mi dice:

    codice:
    symbol  : constructor arItem(<anonymous java.lang.Runnable>)
    location: class cc.arItem
                    new arItem(this).setVisible(true);

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    già, scusa mi ti ho risposto un po' troppo precipitosamente e non mi ero accorto del modo in cui istanzi arItem.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

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.