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

Discussione: Problema con JFrame

Hybrid View

  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
    Aug 2009
    Messaggi
    213
    Scusami ancora c'è qualcosa che non mi quadra. Quando istanzio l'arraylist nel costruttore di rubrica non mi riconosce gli argomenti della classe Contatto: contatti.add(new Contatto(nome,cognome,telefono,email)).Stessa cosa nel main. Mi sa che mi devo andare a rivedere i fondamentali.

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Quote Originariamente inviata da tonino1 Visualizza il messaggio
    Scusami ancora c'è qualcosa che non mi quadra. Quando istanzio l'arraylist nel costruttore di rubrica non mi riconosce gli argomenti della classe Contatto: contatti.add(new Contatto(nome,cognome,telefono,email)).Stessa cosa nel main.
    Per istanziare l'ArrayList si intende che devi solo crearla :

    codice:
    contatti = new ArrayList<Contatto>();
    Solo questo devi inserire nel costruttore di Rubrica, o nel metodo main se non ti importa di avere più Rubriche per ora.
    Poi l'aggiunta dei contatti non devi farla direttamente lì, o meglio puoi farla per vedere se funziona, ma devi "inventarti" tu 4 stringhe da passare al costruttore di Contatto, senza aver letto dai textfield quello che ha inserito l'utente.

    Qual' è l'errore che ricevi quando dici "non mi riconosce gli argomenti della classe Contatto" ?
    Se hai definito nel modo corretto il costruttore di Contatto, con quelle 4 stringhe in ingresso, probabilmente l'errore è che le variabili che passi al costruttore non sono definite da nessuna parte...

    Quote Originariamente inviata da tonino1 Visualizza il messaggio
    Mi sa che mi devo andare a rivedere i fondamentali.
    E' una buona cosa che venga da te questa proposta, nel senso che continuare a posticipare un bel ripasso rischia di farti perdere molto più tempo

    Se posso darti un consiglio parti da come utilizzare i metodi, definire i costruttori, riempire e modificare le strutture dati come array e liste (di cui ArrayList è un esempio) etc...

    Una volta che ti sono chiari questi concetti, puoi anche riprendere in mano la tua Rubrica, ma sarebbe meglio evitare ancora la parte grafica, che è uno step successivo.
    Prova cioè a realizzare la tua rubrica senza utilizzare le finestre, ma inserendo da console i dati, così focalizzerai il problema sul popolamento della lista, la modifica dei contatti, l'inserimento, la rimozione...

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    213
    Mannaggia, mi sembrava di essere vicino a completare la Rubrica. La parte grafica non mi da grossi problemi. Inserire metodi, parametri, classi e richiamarli quello si che mi portano il 90% del tempo. Però ci sono cose che nessun libro o guida ti dice ed è li che perdo il tempo a fare tentavi.Conosci qualche buona guida?
    Ciao

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Quote Originariamente inviata da tonino1 Visualizza il messaggio
    Mannaggia, mi sembrava di essere vicino a completare la Rubrica. La parte grafica non mi da grossi problemi. Inserire metodi, parametri, classi e richiamarli quello si che mi portano il 90% del tempo. Però ci sono cose che nessun libro o guida ti dice ed è li che perdo il tempo a fare tentavi.Conosci qualche buona guida?
    Ciao
    A essere onesto non direi che la parte grafica non crei molti problemi, nel codice che hai postato ho fatto qualche critica ma davvero molto non va.
    Non lo dico per scoraggiarti, è solo un consiglio, mettila un attimo da parte e aspetta di avere un po' più di scioltezza col resto.

    Purtroppo non so consigliarti quale sia la miglior guida, quella che c'è qui sul forum è sicuramente un buon inizio e io l'ho letta, ma non posso fare paragoni perché ho letto davvero poco in generale.
    Di libri ho sentito parlare molto bene del manuale di Claudio De Sio, ma anche qui non l'ho letto

    La cosa importante è non aver lasciarsi dubbi indietro, fermati appena c'è qualcosa che non capisci e cerca online se non hai un buon libro, anche solo sui forum ci sono tonnellate di discussioni

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 © 2026 vBulletin Solutions, Inc. All rights reserved.