Pagina 1 di 11 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 108

Discussione: Problema con JFrame

  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    213

    Problema con JFrame

    Ciao a tutti. Volevo chiedervi come faccio a risolvere un problema.
    Ho un frame con un JButton che mi apre un frame per inserire dei dati in alcune JText. Il testo inserito nelle JText lo vorrei inserire in un'altro frame con delle JLabel che visualizzano quello che ho inserito nel JText dell'altro frame. Per comodità vi posto il codice:
    codice:
    import javax.swing.*;
    
    
    import java.awt.*;
    
    
    import java.awt.BorderLayout;
    import java.awt.FlowLayout;
    import java.awt.Panel;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.*;
    import java.io.BufferedReader;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintStream;
    import java.util.*;
    import java.lang.*;
    
    
    public class Rubrica extends JFrame implements ActionListener {
        
        
        JButton VisualizzaContatto=new JButton("Visualizza Contatto");
        JButton AggiungiContatto=new JButton("Aggiungi Contatto");
        JButton ModificaContatto=new JButton("Modifica Contatto");
        JButton RimuoviContatto=new JButton("Rimuovi Contatto");
        JButton LeggidaFile=new JButton("Leggi da File");
        
        
        public Rubrica(){
            super("Rubrica");
            GridLayout p=new GridLayout(4,0);
            JPanel p1=new JPanel();
            p1.setLayout(p);
            add(p1); 
            //this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            p1.add(VisualizzaContatto);
            p1.add(AggiungiContatto);
            p1.add(ModificaContatto);
            p1.add(RimuoviContatto);
            p1.add(LeggidaFile);
            setSize(400,200);
            //pack();
            show();
            
            AggiungiContatto.addActionListener(this);
            ModificaContatto.addActionListener(this);
            RimuoviContatto.addActionListener(this);
            LeggidaFile.addActionListener(this);
            VisualizzaContatto.addActionListener(this);
            }
        
        public void actionPerformed(ActionEvent e){
            if (e.getSource()==VisualizzaContatto){
                
                new FinestraVisualizzaContatto();
            
                
                
                
                
            }    else if(e.getSource()==AggiungiContatto)
            {
                new FinestraAggiungiContatto();
                
                
            }  else if (e.getSource()==ModificaContatto)
            {
                new FinestraModificaContatto();
                
                
            }else if(e.getSource()==RimuoviContatto)
            {
                new FinestraRimuoviContatto();
            }else if(e.getSource()==LeggidaFile){
                
                    try
                    {
                        Runtime.getRuntime().exec("notepad Rubrica.txt");
                    }catch (Exception f) {
                            System.out.println ("Errore exec:" + f);
                    }
        
            }
            
        }
    
    
        
        
            
        public static void main(String[] args){
            new Rubrica();
            
    
    
    
    
            
        }
        
        public class FinestraVisualizzaContatto extends JFrame {
            private FinestraAggiungiContatto a;
            
            public     FinestraVisualizzaContatto(){
                JLabel nome1=new JLabel("Nome:   ");
                JLabel nomea=new JLabel(a.nomeb.getText());
                
                //JLabel nomea=new JLabel();
                
                JLabel cognome1=new JLabel("Cognome:   ");
                JLabel cognomea=new JLabel();
                JLabel tel1=new JLabel("Telefono:   ");
                JLabel tela=new JLabel();
                JLabel email1=new JLabel("E-mail:   ");
                JLabel emaila=new JLabel();
                
                
               GridLayout p=new GridLayout(4,2);
                    JPanel p1=new JPanel();
                    p1.setLayout(p);
                    add(p1);
                    p1.add(nome1);
                    p1.add(nomea);
                    p1.add(cognome1);
                    p1.add(cognomea);
                    p1.add(tel1);
                    p1.add(tela);
                    p1.add(email1);
                    p1.add(emaila);
                    //pack();
                    setSize(300,300);
                    show();
                    
                    
            }
            
            public void visualizza(){
                try
                {
                FileReader f;
                f=new FileReader("Rubrica.txt");
                BufferedReader b;
                b=new BufferedReader(f);
                String s;
                s=b.readLine();
                
                System.out.println(s);
                }
                catch (IOException e)
                  {
                      System.out.println("Errore: " + e);
                      System.exit(1);
                  }
            }
            //String nomi=a.nomeb.getText();
            // nomea=a.nomeb.getText();
            
            
        }
        
        
        
            
            
            
            
        
        public class FinestraAggiungiContatto extends JFrame implements ActionListener {
            JLabel nome2=new JLabel("Nome:   ");
            JLabel cognome2=new JLabel("Cognome:   ");
            JLabel tel2=new JLabel("Telefono:   ");
            JLabel email2=new JLabel( "E-mail:   ");
            JTextField nomeb=new JTextField();
            JTextField cognomeb=new JTextField();
            JTextField telb=new JTextField();
            JTextField emailb=new JTextField();
            String nome=nomeb.getText();
            JButton salva=new JButton("Salva");
            
            
        public FinestraAggiungiContatto(){
                GridLayout p2=new GridLayout(5,2);
                JPanel p3=new JPanel();
                p3.setLayout(p2);
                add(p3);
                p3.add(nome2);
                p3.add(nomeb);
                p3.add(cognome2);
                p3.add(cognomeb);
                p3.add(tel2);
                p3.add(telb);
                p3.add(email2);
                p3.add(emailb);
                p3.add(salva);
                salva.addActionListener(this);
                
                //pack();
                setSize(300,300);
                show();
                }
        public void Aggiungi(){
            ArrayList<String> lista = new ArrayList<String>();
            String nome=nomeb.getText();
            String cognome=cognomeb.getText();
            String tel=telb.getText();
            String email=emailb.getText();
              lista.add(nome);
              lista.add(cognome);
              lista.add(tel);
              lista.add(email); 
               
               for (int i=0;i<lista.size();i++){
                  
                  
                  try
                 {
                     
                    FileOutputStream prova = new FileOutputStream("Rubrica.txt");
                    PrintStream scrivi = new PrintStream(prova);
                    
                    scrivi.printf("%s\n",lista);
                    
                    System.out.printf("%s\n",lista.get(i));
                 }
                  catch (IOException e)
                  {
                      System.out.println("Errore: " + e);
                      System.exit(1);
                  }
        }
        }
        
        public void actionPerformed(ActionEvent e){
            if (e.getSource()==salva){
                Aggiungi();
            }
        }
        
     }
        
        public class FinestraModificaContatto extends JFrame {
            JLabel nome3=new JLabel("Nome:   ");
            JLabel cognome3=new JLabel("Cognome:   ");
            JLabel tel3=new JLabel("Telefono:   ");
            JLabel email3=new JLabel( "E-mail:   ");
            JTextField nomec=new JTextField();
            JTextField cognomec=new JTextField();
            JTextField telc=new JTextField();
            JTextField emailc=new JTextField();
            
            
            public FinestraModificaContatto(){
                GridLayout p3=new GridLayout(4,2);
                JPanel p4=new JPanel();
                p4.setLayout(p3);
                add(p4);
                p4.add(nome3);
                p4.add(nomec);
                p4.add(cognome3);
                p4.add(cognomec);
                p4.add(tel3);
                p4.add(telc);
                p4.add(email3);
                p4.add(emailc);
                
                //pack();
                setSize(300,300);
                show();
                }
            }
        
        public class FinestraRimuoviContatto extends JFrame {
            JLabel nome4=new JLabel("Nome:   ");
            JLabel cognome4=new JLabel("Cognome:   ");
            JLabel tel4=new JLabel("Telefono:   ");
            JLabel email4=new JLabel( "E-mail:   ");
            JTextField nomed=new JTextField();
            JTextField cognomed=new JTextField();
            JTextField teld=new JTextField();
            JTextField emaild=new JTextField();
            
            
            public FinestraRimuoviContatto(){
                GridLayout p3=new GridLayout(4,2);
                JPanel p4=new JPanel();
                p4.setLayout(p3);
                add(p4);
                p4.add(nome4);
                p4.add(nomed);
                p4.add(cognome4);
                p4.add(cognomed);
                p4.add(tel4);
                p4.add(teld);
                p4.add(email4);
                p4.add(emaild);
                //pack();
                setSize(300,300);
                show();
                }
        }
        
        
            
            
            /*try
             {
                 FileOutputStream prova = new FileOutputStream("Rubrica.txt");
                  PrintStream scrivi = new PrintStream(prova);
                  InputStreamReader is = new InputStreamReader(System.in);
                  BufferedReader br = new BufferedReader(is);
                  String lettura=br.readLine();
                  scrivi.println(lettura);
              }
              catch (IOException e)
              {
                  System.out.println("Errore: " + e);
                  System.exit(1);
              }
            
            
            public LeggidaFile(){
                
                }*/
        
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Ciao!

    Intanto ti suggerirei di utilizzare un titolo un po' più significativo, e anche di specificare meglio la tua domanda: "Problema con JFrame" dice davvero poco e anche leggendo sotto la tua domanda rimane molto vaga.

    Qual'è il problema specifico che riscontri? Non sai come acquisire i dati inseriti nel JTextField (un po' strano perché è già scritto nel tuo codice) ? O vorresti un consiglio più generale su come impostare il design delle classi ? O altro ?
    Può anche essere una domanda molto generale, ma basta che sia chiaro, nel senso che così sembri essere in attesa che qualcuno scriva la soluzione ...

    Una volta che hai acquisito il testo inserito il resto viene da sé: il codice per creare un altro frame e delle JLabel che mostrino del testo è davvero semplice, e lo fai già nel tuo codice.

    A proposito del codice che hai inserito, ci sono varie cose che non vanno molto bene, dall'uso di un metodo deprecato come show o un po' in disuso come setSize (meglio richiamare il pack sul frame), all'accesso diretto alle variabili di una classe senza metodi appositi...

    Poi potresti sfruttare l'ereditarietà per costruire finestre così simili tra loro, e ci sono molte altre piccole cose (non ultimo il fatto di adeguarsi alle convenzioni del linguaggio, come l'utilizzo di iniziali minuscole per le variabili delle classi) che andrebbero sistemate...

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    213
    Ti ringrazio tantissimo per l'attenzione che mi poni. Il problema è che forse in effetti ho qualche lacuna con le classi. Come puoi vedere dal codice ho creato una classe per ogni frame( sono 4). Ora quello che non riesco a fare è settare il testo delle JLabel di un frame che prenda il contenuto delle JText di un altro JFrame. Mi spiego meglio. Quando inserisco il testo nel frame INserisciContatto mi dovrebbe visualizzare nel VisualizzaContatto quello che ho inserito nel primo frame.Per fare questo ho creato un'istanza della classe FinestraAggiungiContatto nella classe FinestraVisualizzaContatto poi con l'istruzione JLabel nomea=new JLabel(a.nomeb.getText());.
    Pero non mi visualizza nulla. E non riesco a capire perchè.
    Spero di essere stato chiaro e ti ringrazio anticipatamente.

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Quote Originariamente inviata da tonino1 Visualizza il messaggio
    Ti ringrazio tantissimo per l'attenzione che mi poni. Il problema è che forse in effetti ho qualche lacuna con le classi. Come puoi vedere dal codice ho creato una classe per ogni frame( sono 4).

    Ok a questo si può arrivare in un secondo momento, come dicevo molte cose vanno sistemate, ma pensiamo prima alla cosa più urgente

    Quote Originariamente inviata da tonino1 Visualizza il messaggio
    Quando inserisco il testo nel frame INserisciContatto mi dovrebbe visualizzare nel VisualizzaContatto quello che ho inserito nel primo frame.Per fare questo ho creato un'istanza della classe FinestraAggiungiContatto nella classe FinestraVisualizzaContatto poi con l'istruzione JLabel nomea=new JLabel(a.nomeb.getText());.
    Pero non mi visualizza nulla.
    Ok ora è chiaro quello che intendevi, mi ero concentrato sulle cose che non andavano prima.

    In realtà se provi ad aprire il frame VisualizzaContatto non è che non visualizzi nulla, con il codice che hai postato il frame non si apre proprio, perché ricevi una NullPointerException in esecuzione...

    La riga di cui parlavi tu è quella che causa l'eccezione: quando istanzi un oggetto della classe FinestraVisualizzaContatto la sua variabile a di tipo FinestraAggiungiContatto (abituati a dare nomi informativi alle tue variabili, se uno legge "a" cosa capisce ?) non è stata istanziata da nessuna parte, quindi è ancora null.

    Tu poi provi a prenderne il JTextField chiamato nomeb, e qui ricevi la NullPointerException.

    Per non ricevere quell'eccezione in esecuzione devi sicuramente modificare qualcosa, ma io cambierei proprio il design della classe.
    Se io sono un utilizzatore della tua rubrica e vedo che c'è il pulsante Visualizza Contatto, mi aspetto di trovare una lista di contatti e poi scegliere quale visualizzare, non certo di vedere il contatto che sto provando a inserire da un'altra parte...

    Al limite potresti mostrare l'ultimo contatto inserito, ma comunque non dovresti avere bisogno di collegare fra di loro i vari frame, devi avere una struttura che memorizzi i vari contatti da poter leggere e modificare a tuo piacimento...

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    213
    Quote Originariamente inviata da Ansharja Visualizza il messaggio
    Ok a questo si può arrivare in un secondo momento, come dicevo molte cose vanno sistemate, ma pensiamo prima alla cosa più urgente



    Ok ora è chiaro quello che intendevi, mi ero concentrato sulle cose che non andavano prima.

    In realtà se provi ad aprire il frame VisualizzaContatto non è che non visualizzi nulla, con il codice che hai postato il frame non si apre proprio, perché ricevi una NullPointerException in esecuzione...

    La riga di cui parlavi tu è quella che causa l'eccezione: quando istanzi un oggetto della classe FinestraVisualizzaContatto la sua variabile a di tipo FinestraAggiungiContatto (abituati a dare nomi informativi alle tue variabili, se uno legge "a" cosa capisce ?) non è stata istanziata da nessuna parte, quindi è ancora null.

    Tu poi provi a prenderne il JTextField chiamato nomeb, e qui ricevi la NullPointerException.

    Per non ricevere quell'eccezione in esecuzione devi sicuramente modificare qualcosa, ma io cambierei proprio il design della classe.
    Se io sono un utilizzatore della tua rubrica e vedo che c'è il pulsante Visualizza Contatto, mi aspetto di trovare una lista di contatti e poi scegliere quale visualizzare, non certo di vedere il contatto che sto provando a inserire da un'altra parte...

    Al limite potresti mostrare l'ultimo contatto inserito, ma comunque non dovresti avere bisogno di collegare fra di loro i vari frame, devi avere una struttura che memorizzi i vari contatti da poter leggere e modificare a tuo piacimento...
    Ok. Molto chiaro. Provero' a prendere i dati da una lista che ho creato sempre nello stesso programma. Penso pero' che mi rimanga il problema di come instanziare un'oggetto di un'altra classe. Comunque ti ringrazio.ciao

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    213
    Ciao. Niente da fare non mi riesce di istanziare un oggetto di una classe in un'altra classe. Ma si può fare? Di solito faccio così:
    FinestraAggiungiContatto nome=new FinestraAggiungiContatto();
    Poi cerco di popolare una lista in un frame chiamato FinestraVisualizzaContatto così:
    lista.add(nome.getText();.
    Ma mi dà sempre errore sull'istanza dell'oggetto della classe FinestraAggiungiContatto.

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Quote Originariamente inviata da tonino1 Visualizza il messaggio
    Ciao. Niente da fare non mi riesce di istanziare un oggetto di una classe in un'altra classe. Ma si può fare?
    Certo che si può fare, sarebbe un po' difficile fare programmazione ad oggetti con una limitazione così restrittiva non credi ?

    Quote Originariamente inviata da tonino1 Visualizza il messaggio
    Di solito faccio così:
    FinestraAggiungiContatto nome=new FinestraAggiungiContatto();
    Poi cerco di popolare una lista in un frame chiamato FinestraVisualizzaContatto così:
    lista.add(nome.getText();.
    Ma mi dà sempre errore sull'istanza dell'oggetto della classe FinestraAggiungiContatto.
    Se per "mi dà errore" ti riferisci al fatto di ricevere sempre una NullPointerException in esecuzione, la risposta non può che essere una: stai nuovamente tentando di accedere a un oggetto/variabile che non è ancora stato istanziato.
    Questo nella stragrande maggioranza dei casi, ovviamente a meno che non sia tu a porre volontariamente una variabile a null (improbabile)...

    Senza avere il codice sottomano (l'avrai modificato immagino) è impossibile dire dove questo accade, ma ti basta guardare la riga che ti dà errore e controllare una ad una tutte le operazioni che fai, banalmente se stampi a video tutte le variabili della riga coinvolta e ricevi da qualche parte "null", hai già un'indicazione di quale sia a causare l'errore...

    Nelle due righe che hai postato ora poi, hai chiamato nome un frame di tipo FinestraAggiungiContatto, e poi sotto fai nome.getText(): quindi o hai sbagliato a scrivere il secondo nome, e volevi riferirti a uno dei tuoi textField, o devi avere definito nella classe FinestraAggiungiContatto un metodo getText() (non lo vedo molto sensato), o stai chiamando in parti diverse del codice due variabili con lo stesso nome, e questa è una pessima idea visto il casino in cui sei in mezzo

    Intanto se vuoi riposta il codice con le modifiche e ti dico dove sta il problema, ma ripensa a quello che ho scritto sopra: il design delle classi che stai creando non va affatto bene, e se continui a non volerlo "correggere" subito, farai sempre più fatica in futuro.

    Perché non hai ancora creato una classe Contatto? E' l'entità di base della tua rubrica, e ci fai sopra ogni operazione...
    Nel metodo Aggiungi che hai postato sopra (tra l'altro i nomi dei metodi per convenzione dovrebbero iniziare con la minuscola), inserisci le informazioni dei textfield in un ArrayList di stringhe e poi provi a scrivere la lista in un file, tra l'altro sovrascrivendolo ogni volta.

    Perché in quel punto non istanzi un nuovo contatto passando come parametri i dati inseriti, e non inserisci il nuovo contatto creato in una lista di Contatti ?
    Se poi la lista di Contatti la dichiari come variabile della classe Rubrica, sarà visibile a tutte le classi della tua applicazione, e non dovrai MAI avere bisogno di creare frame dentro altri frame e altre cose inutili ....
    Ultima modifica di Ansharja; 29-05-2016 a 08:46

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    213
    Ho riscritto il codice ma ho ancora dei problemi.Lo posto per intero con tutto il ringraziamento per la pazienza di leggerlo:
    codice:
    import javax.swing.*;
    
    
    import java.awt.*;
    import java.awt.List;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.*;
    import java.io.*;
    import java.io.BufferedReader;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintStream;
    import java.util.*;
    import java.lang.*;
    
    
    
    
    public class Rubrica extends JFrame implements ActionListener {
        
        
        JButton VisualizzaContatto=new JButton("Visualizza Contatto");
        JButton AggiungiContatto=new JButton("Aggiungi Contatto");
        JButton ModificaContatto=new JButton("Modifica Contatto");
        JButton RimuoviContatto=new JButton("Rimuovi Contatto");
        JButton LeggidaFile=new JButton("Leggi da File");
        
        
        public Rubrica(){
            super("Rubrica");
            GridLayout p=new GridLayout(4,0);
            JPanel p1=new JPanel();
            p1.setLayout(p);
            add(p1); 
            p1.add(VisualizzaContatto);
            p1.add(AggiungiContatto);
            p1.add(ModificaContatto);
            p1.add(RimuoviContatto);
            p1.add(LeggidaFile);
            setSize(400,200);
            show();
            AggiungiContatto.addActionListener(this);
            ModificaContatto.addActionListener(this);
            RimuoviContatto.addActionListener(this);
            LeggidaFile.addActionListener(this);
            VisualizzaContatto.addActionListener(this);
            }
        
        public void actionPerformed(ActionEvent e){
            if (e.getSource()==VisualizzaContatto){
                
                new FinestraVisualizzaContatto();
            
            }    else if(e.getSource()==AggiungiContatto)
            {
                new FinestraAggiungiContatto();
                
                
            }  else if (e.getSource()==ModificaContatto)
            {
                new FinestraModificaContatto();
                
                
            }else if(e.getSource()==RimuoviContatto)
            {
                new FinestraRimuoviContatto();
            }else if(e.getSource()==LeggidaFile){
                
                    try
                    {
                        Runtime.getRuntime().exec("notepad Rubrica.txt");
                    }catch (Exception f) {
                            System.out.println ("Errore exec:" + f);
                    }
        }
    }
    
    
        public static void main(String[] args){
            new Rubrica();
            
                
             }
        
         class Contatto{
            private  FinestraAggiungiContatto a=new FinestraAggiungiContatto();
             ArrayList<String> lista=new ArrayList();
                String b= a.nomeb.getText();
                String c=a.cognomeb.getText();
                String d=a.telb.getText();
                String e=a.emailb.getText();
                String f;
                
                public void Contatto(){
                lista.add(b);
                lista.add(c);
                lista.add(d);
                lista.add(e);
                 f=(String) lista.set(0,b); 
                    
                System.out.println(f);
               
                 }
                
            }
        
        
        public class FinestraVisualizzaContatto extends JFrame {
             Contatto a=new Contatto();
            
            public     FinestraVisualizzaContatto(){
                
                List ricerca=new List();
                
                JLabel nome1=new JLabel("Nome:   ");            
                JLabel nomea=new JLabel();
                JLabel cognome1=new JLabel("Cognome:   ");
                JLabel cognomea=new JLabel();
                JLabel tel1=new JLabel("Telefono:   ");
                JLabel tela=new JLabel();
                JLabel email1=new JLabel("E-mail:   ");
                JLabel emaila=new JLabel();
                
                 GridLayout p=new GridLayout(5,2);
                    JPanel p1=new JPanel();
                    p1.setLayout(p);
                    add(p1);
                    p1.add(nome1);
                    p1.add(nomea);
                    p1.add(cognome1);
                    p1.add(cognomea);
                    p1.add(tel1);
                    p1.add(tela);
                    p1.add(email1);
                    p1.add(emaila);
                    p1.add(ricerca);
                    setSize(300,300);
                    show();
                    
                    ricerca.add(a.lista.get(0));
                        
                    
                    
            }
            
        }
        
        public class FinestraAggiungiContatto extends JFrame implements ActionListener {
            JLabel nome2=new JLabel("Nome:   ");
            JLabel cognome2=new JLabel("Cognome:   ");
            JLabel tel2=new JLabel("Telefono:   ");
            JLabel email2=new JLabel( "E-mail:   ");
            JTextField nomeb=new JTextField();
            JTextField cognomeb=new JTextField();
            JTextField telb=new JTextField();
            JTextField emailb=new JTextField();
            String nome=nomeb.getText();
            JButton salva=new JButton("Salva");
            
            
        public FinestraAggiungiContatto(){
                GridLayout p2=new GridLayout(5,2);
                JPanel p3=new JPanel();
                p3.setLayout(p2);
                add(p3);
                p3.add(nome2);
                p3.add(nomeb);
                p3.add(cognome2);
                p3.add(cognomeb);
                p3.add(tel2);
                p3.add(telb);
                p3.add(email2);
                p3.add(emailb);
                p3.add(salva);
                salva.addActionListener(this);
                setSize(300,300);
                show();
                }
        public void inserisci(){
            
            try
            {
            
            FileWriter writer = new FileWriter("Rubrica.txt", true);
            PrintWriter out=new PrintWriter(writer);
            out.println("Contatto");
            out.println(nomeb.getText());
            out.println(cognomeb.getText());
            out.println(telb.getText());
            out.println(emailb.getText());
            out.println("");
            writer.flush();
            writer.close();
            }
             catch(IOException e) {
                  e.printStackTrace();
                }
        }
        public void actionPerformed(ActionEvent e){
            if (e.getSource()==salva){
                inserisci();
            }
        }
        
     }
        
        public class FinestraModificaContatto extends JFrame {
            JLabel nome3=new JLabel("Nome:   ");
            JLabel cognome3=new JLabel("Cognome:   ");
            JLabel tel3=new JLabel("Telefono:   ");
            JLabel email3=new JLabel( "E-mail:   ");
            JTextField nomec=new JTextField();
            JTextField cognomec=new JTextField();
            JTextField telc=new JTextField();
            JTextField emailc=new JTextField();
            
            
            public FinestraModificaContatto(){
                GridLayout p3=new GridLayout(4,2);
                JPanel p4=new JPanel();
                p4.setLayout(p3);
                add(p4);
                p4.add(nome3);
                p4.add(nomec);
                p4.add(cognome3);
                p4.add(cognomec);
                p4.add(tel3);
                p4.add(telc);
                p4.add(email3);
                p4.add(emailc);
                setSize(300,300);
                show();
                }
            }
        
        public class FinestraRimuoviContatto extends JFrame {
            JLabel nome4=new JLabel("Nome:   ");
            JLabel cognome4=new JLabel("Cognome:   ");
            JLabel tel4=new JLabel("Telefono:   ");
            JLabel email4=new JLabel( "E-mail:   ");
            JTextField nomed=new JTextField();
            JTextField cognomed=new JTextField();
            JTextField teld=new JTextField();
            JTextField emaild=new JTextField();
            
            
            public FinestraRimuoviContatto(){
                GridLayout p3=new GridLayout(4,2);
                JPanel p4=new JPanel();
                p4.setLayout(p3);
                add(p4);
                p4.add(nome4);
                p4.add(nomed);
                p4.add(cognome4);
                p4.add(cognomed);
                p4.add(tel4);
                p4.add(teld);
                p4.add(email4);
                p4.add(emaild);
                //pack();
                setSize(300,300);
                show();
                }
        }
    }
    Ho pensato di popolare una list con i dati che prendo da un'arraylist. L'ArrayList l'ho creata nella classe Contatto. Poi nel frame FinestraVisualizzaContatto ho aggiunto una List che prende i valori dall'ArrayList e li non funziona.Non visualizza nulla.Dove sbaglio?.
    A questo punto vi sarei grato se mi diceste se ho impostato bene tutto il programma, fra l'altro quando visualizzo il frame FinestraVisualizzaContatto mi si apre anche il Frame FinestraAggiungiContatto.
    Ultima modifica di tonino1; 29-05-2016 a 17:57

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Quote Originariamente inviata da tonino1 Visualizza il messaggio
    A questo punto vi sarei grato se mi diceste se ho impostato bene tutto il programma
    No, il programma non è affatto impostato bene. Fidati, non sono io ad essere rompiscatole, se qualcuno ti dicesse che quanto postato va bene ti starebbe solo prendendo in giro.

    Come dicevo nei post precedenti non ha senso provare ad aprire finestre dentro ad altre finestre, non devi assolutamente farlo.
    Ora hai aggiunto la classe Contatto, ma l'hai scritta malissimo.

    Una classe deve fare solo ed esclusivamente quello che ha senso che faccia, un Contatto nel tuo contesto è un insieme di informazioni relative a una persona, non deve nel modo più assoluto avere una variabile FinestraAggiungiContatto e andare a leggere le informazioni contenute nei suoi textField.
    Anche il fatto che abbia un'ArrayList di stringhe non ha senso, perché nel tuo caso un Contatto ha 4 informazioni da memorizzare: nome,cognome,email e telefono, per cui userai 4 stringhe.
    Se ne aggiungerai altre creerai altre variabili di tipo String, non usare qui un'ArrayList, ti complichi solo la vita.

    Ecco come dovresti scrivere la classe Contatto:

    codice:
    class Contatto
    {
    	private String nome,cognome,email,telefono;
    	public Contatto(String nome,String cognome,String telefono,String email)
    	{
    		this.nome = nome;
    		this.cognome = cognome;
    		this.telefono = telefono;
    		this.email = email;
    	}
    	// Metodi per prendere le informazioni di ogni contatto
    	public String getCognome(){
    		return cognome;
    	}
    	public String getEmail(){
    		return email;
    	}
    	public String getNome(){
    		return nome;
    	}
    	public String getTelefono(){
    		return telefono;
    	}
    	// Metodi per modificare le informazioni di ogni contatto
    	public void setCognome(String nuovoCognome){
    		cognome = nuovoCognome;
    	}
    	public void setEmail(String nuovaEmail){
    		email = nuovaEmail;
    	}
    	public void setNome(String nuovoNome){
    		nome = nuovoNome;
    	}
    	public void setTelefono(String nuovoTelefono){
    		telefono = nuovoTelefono;
    	}
    }
    Come dicevo Contatto ha solo le informazioni che deve contenere, più i metodi per restituire le informazioni (questa pratica è molto migliore del fatto di accedere direttamente ai campi di una classe, quindi se vuoi conoscere il nome di un Contatto c, farai c.getNome() e non c.nome) e per modificarle (vale quanto detto per il metodo get, non scriverai c.email = "pippo@.." ma farai c.setEmail("pippo@...")).

    Un Contatto non deve avere nessuna informazione riguardo a finestre o altro, credimi, se questo non ti è chiaro non ha senso andare avanti.

    Come dicevo nel precedente post, creati ora una lista di contatti, va benissimo un' ArrayList.
    Quando inserisci un contatto, non fai altro che prendere le informazioni inserite, e poi aggiungi il nuovo contatto alla lista, tipo così:

    codice:
    listaContatti.add(new Contatto(nome,cognome,telefono,email));
    dove nome,cognome,etc sono le informazioni inserite nei textField.

    Quando vuoi visualizzare un contatto devi reperire un elemento dalla lista di contatti, questa parte è più difficile, perché dovresti caricare in un frame la lista di tutti i contatti, e poi scegliere il contatto da visualizzare.
    Per ora puoi saltare questa parte, e nel frame VisualizzaContatto mostri in automatico il primo elemento della lista (controllando che non sia null, altrimenti riceverai sempre NullPointerException in esecuzione).

    Per ora applica queste modifiche, ma c'è ancora molto lavoro da fare ....

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    213
    Ti sono grato per tutte le critiche che mi fai perchè le ritengo costruttive e sincere. Quindi quando vuoi spara sempre a zero. Torniamo a noi.
    Non riesco a capire dove inserire l'ArrayList. E poi come faccio a collegare le JTexField di una classe ad una ArrayList di un'altra classe.Mi spiego.
    Nella classe contatto ho provato a inserire un'ArrayList e popolarla con l'istruzione che hai dato tu. Ma poi quando vado nella classe FinestraVisualizzaContatto e la istanzio non funziona.

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.