Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225

    [Java] Chiarimento su RIFERIMENTI

    Ho tre classi A, B e C.

    La classe A deve avere un riferimento alla classe B, ma l'oggetto di classe A viene creato a partire dalla classe C!

    Come gestisco i riferimenti in questo caso?

    Io ho fatto in questo modo:
    La classe A ha tra i suoi attributi un riferimento di classe B;
    La classe C ha tra i suoi attributi un riferimento di classe B;
    Quando dalla classe C creo un oggetto di classe A gli passo il riferimento alla classe B;
    La classe A accetta come parametro un chiamante di classe B;
    Al riferimento di classe B della classe A assegno il chiamante di classe B.

    Non so se sono stata chiara!
    Va bene come ho fatto?
    GRAZIE

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

    Re: [Java] Chiarimento su RIFERIMENTI

    Originariamente inviato da ELY85
    La classe A ha tra i suoi attributi un riferimento di classe B;
    La classe C ha tra i suoi attributi un riferimento di classe B;
    Quando dalla classe C creo un oggetto di classe A gli passo il riferimento alla classe B;
    Tecnicamente non fa una piega.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    uffa...allora non capisco perchè non mi si apre una finestra il cui pannello che dovrebbe contenere una lista è la classe A!!!

    L'errore che mi dà il compilatore è in un'altra discussione: "Visualizzare una lista su finestra".
    Potresti darci un'occhiata per piacere?
    GRAZIE MILLE!

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    Ho un problema con un riferimento:

    codice:
    public class PannelloLista extends JPanel implements ActionListener {
        private JTextField txt;
        private JList lista;
        private JButton b;
        private FinestraLista rife;
        private PanSocieta riferimento;
        
    
        public PannelloLista(FinestraLista chia, PanSocieta chiamante) {
            super();
            
            rife = chia;
            riferimento = chiamante;
            
            txt = new JTextField("Lista dei clienti inseriti");
            txt.setEditable(false);
            
            int lunghezza = riferimento.CLIENTI.length();
            String[] clienti = new String[lunghezza];
            clienti = riferimento.c.getNomiClienti(riferimento.CLIENTI);
            
            lista = new JList(clienti);
            
            b = new JButton("  OK  ");
            b.addActionListener(this);
            
            add(txt);
            add(lista);
            add(b);
        }
        
        public void actionPerformed(ActionEvent e) {
            rife.setVisible(false);
        }
        
        
    }
    "rife" è un riferimento alla finestra "fl" che si trova nella classe FinestraLista; vorrei che cliccando sul bottone "OK" fl diventasse invisibile. Ho passato il riferimento a questo pannello ma il compilatore mi dice che fl è un oggetto vuoto!
    Infatti a "rife" gli assegno "chia" nel costruttore del pannello, perciò il metodo actionPerformed() non vede questo assegnamento e il compilatore mi da errore!
    Come risolvere questo problema?
    GRAZIE!

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Da quello che ho capito, tu dici che rife è un riferimento all'oggetto fl che si trova dentro alla classe FinestraLista

    Originariamente inviato da ELY85
    "rife" è un riferimento alla finestra "fl" che si trova nella classe FinestraLista
    se è così, allora il metodo setVisible() lo dovresti richiamare sull'oggetto fl e non sull'oggetto FinestraLista...
    Ora tutto dipende da come hai dichiarato l'oggetto fl dentro alla classe FinestraLista. Se è pubblico puoi fare una cosa del genere:
    codice:
    rife.fl.setVisible( false );
    Altrimenti, all'interno della classe FinestraLista dovrai prevedere un metodo apposito che faccia il lavoro e dal pannello richiamerai il metodo. Esempio:
    codice:
    // Nella classe FinestraLista
    public void nascondiFinestra() {
       fl.setVisible( false );
    }
    
    // Nella classe PannelloLista
    public void actionPerformed(ActionEvent e) {
       rife.nascondiFinestra();
    }
    Quello che dovrebbe balzarti subito agli occhi è che se la classe FinestraLista non è una finestra (non estende JFrame), non puoi richiamarci sopra il metodo setVisible().

    Poi, se ho capito male io allora prova a rispiegare la situazione.
    "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

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    Mi sono sbagliata!!! fl è in PanSocieta, non in FinestraLista!! Scusa!
    Questo è PanSocieta dove creo la finestra fl:
    codice:
    public class PanSocieta extends JPanel implements ActionListener {
        .......
        protected FinestraLista fl, fl2;
    
        public PanSocieta(ListNode CLIENTI) {
            
    
    
                     ............
        }
        
        public void actionPerformed(ActionEvent e) {
            
            if (e.getSource()==b1) {
                c = new ClienteDittaIndividuale(t1.getText(), t2.getText());
                CLIENTI.insert(c);
                CLIENTI = c.ordinaLista(CLIENTI);  /** Ordino la lista prima di salvarla su file. */
                c.salvaListaClienti(CLIENTI); 
                String[] NOMI = c.getNomiClienti(CLIENTI);
                System.out.println("Clienti presenti nella ListNode: "); 
                int l = CLIENTI.length();
                for(int i=0; i<l; i++) System.out.println(NOMI[i]);
                System.out.println("Clienti presenti nel file: ");    
                c.leggiCliente(CLIENTI.length());
                
                FinestraLista fl = new FinestraLista("Lista clienti"); 
                Container cont = fl.getContentPane();
                PannelloLista pl = new PannelloLista(this.fl, this);
                cont.add(pl);
                fl.setVisible(true);
                
                FinestraDomanda fd = new FinestraDomanda();
                Container c = fd.getContentPane();
                PannelloDomanda pd = new PannelloDomanda();
                c.add(pd);
                fd.setVisible(true);
           
            }
            
            else {
                CLIENTI.remove(c /*= new ClienteDittaIndividuale(t1.getText(), t2.getText())*/);
                CLIENTI = c.ordinaLista(CLIENTI);
                c.salvaListaClienti(CLIENTI); 
                c.leggiCliente(CLIENTI.length());
                
                FinestraLista fl2 = new FinestraLista("Lista clienti");
                Container cont = fl2.getContentPane();
                PannelloLista pl = new PannelloLista(this.fl2, this);
                cont.add(pl);
                fl2.setVisible(true);
            }
                
        }
    }
    GRAZIE MILLE!

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    Niente....ho fatto un gran casino!!!
    Ho risolto!
    GRAZIE MILLE!

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    NO, non ho risolto niente!
    Continua a darmi errore!
    DOVE SBAGLIO?
    GRAZIE!

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    Rimando tutto il codice utile con le modifiche, se non non ci si capisce niente!

    FinestraLista:
    codice:
    public class FinestraLista extends JFrame {
    
        public FinestraLista(String titolo) {
            super(titolo);
            
            setBounds(150,150, 165,200);
        }
        
        public void nascondiFinestra(FinestraLista f) {
            f.setVisible(false);
        }
    }
    PanSocieta:
    codice:
    public class PanSocieta extends JPanel implements ActionListener {
        .......
        protected FinestraLista fl;
    
        public PanSocieta(ListNode CLIENTI) {
            
    
    
                     ............
        }
        
        public void actionPerformed(ActionEvent e) {
            
            if (e.getSource()==b1) {
                c = new ClienteDittaIndividuale(t1.getText(), t2.getText());
                CLIENTI.insert(c);
                CLIENTI = c.ordinaLista(CLIENTI);  /** Ordino la lista prima di salvarla su file. */
                c.salvaListaClienti(CLIENTI); 
                String[] NOMI = c.getNomiClienti(CLIENTI);
                System.out.println("Clienti presenti nella ListNode: "); 
                int l = CLIENTI.length();
                for(int i=0; i<l; i++) System.out.println(NOMI[i]);
                System.out.println("Clienti presenti nel file: ");    
                c.leggiCliente(CLIENTI.length());
                
                FinestraLista fl = new FinestraLista("Lista clienti"); 
                Container cont = fl.getContentPane();
                PannelloLista pl = new PannelloLista(this.fl, this);
                cont.add(pl);
                fl.setVisible(true);
                
                FinestraDomanda fd = new FinestraDomanda();
                Container c = fd.getContentPane();
                PannelloDomanda pd = new PannelloDomanda();
                c.add(pd);
                fd.setVisible(true);
           
            }
            
            else {
                CLIENTI.remove(c /*= new ClienteDittaIndividuale(t1.getText(), t2.getText())*/);
                CLIENTI = c.ordinaLista(CLIENTI);
                c.salvaListaClienti(CLIENTI); 
                c.leggiCliente(CLIENTI.length());
                
                FinestraLista fl = new FinestraLista("Lista clienti");
                Container cont = fl.getContentPane();
                PannelloLista pl = new PannelloLista(this.fl, this);
                cont.add(pl);
                fl.setVisible(true);
            }
                
        }
    }
    PannelloLista (dove mi da errore!):
    codice:
    public class PannelloLista extends JPanel implements ActionListener {
        private JTextField txt;
        private JList lista;
        private JButton b;
        private FinestraLista rife;
        private PanSocieta riferimento;
        
    
        public PannelloLista(FinestraLista chia, PanSocieta chiamante) {
            super();
            
            setBackground(new Color(102,255,102));
            
            rife = chia;
            riferimento = chiamante;
            
            txt = new JTextField("Lista dei clienti inseriti");
            txt.setEditable(false);
            
            int lunghezza = riferimento.CLIENTI.length();
            String[] clienti = new String[lunghezza];
            clienti = riferimento.c.getNomiClienti(riferimento.CLIENTI);
            
            lista = new JList(clienti);
            
            b = new JButton("  OK  ");
            b.addActionListener(this);
            
            add(txt);
            add(lista);
            add(b);
        }
        
        public void actionPerformed(ActionEvent e) {
            rife.nascondiFinestra(riferimento.fl); //ERRORE QUI
        }
        
    }
    GRAZIE MILLE!!!

  10. #10
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    Posta l'errore grazie..

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.