Ciao a tutti, sto creando un programmino con interfaccia grafica per registrare cani (non chiedetemi a cosa serve )
ho 7 classi le spiego brevemente:

Main chiama la classe home.

Home crea un frame con 2 tasti, inserisci e cerca (premendo i tasti chiama le rispettive funzioni).

Inserisci crea una finestra dove è possibile registrare un cane e lo inserisce nell'arraylist situato nella classe "Lista".

Visualizza crea una finestra dove viene chiesto il nome del cane da visualizzare, chiama la cerca (situata nella classe lista) che ritorna la posizione dopo di che si apre la finestra che visualizza i dati del cane.

Lista contiene l'arraylist, la funzione cerca e 2 funzioni che richiamo la salva e la carica su file.

DatFile classe per il salvataggio e il caricamento su file.

Cane contiene i dati del cane (la struct del C).

Il problema è che dopo l'inserimento, quando si chiama la cerca l'arraylist si svuota ... (ho verificato con il debug che l'inserimento funziona, il cane c'è nell'arreylist). Spero di essere stato abbastanza chiaro

codice:
public class Main {

    public static void main(String[] args) {
        Home h=new Home();
    }
}
codice:
public class Visualizza extends JFrame implements ActionListener, Serializable {
    private JTextField textnome;
    private JButton cerca;
    private JFrame f;
    private JFrame f2;
    private Lista l=new Lista();
    private ArrayList temp=new ArrayList();

    Visualizza(){
        elementi();
    }

    public void elementi(){
        //Frame
        f=new JFrame();
        f.setVisible(true);
        f.setTitle("Cerca un Cane");
        f.setSize(500, 100);
        f.setDefaultCloseOperation(EXIT_ON_CLOSE);
        f.setLayout(null);
        //Nome da cercare
        JLabel nome=new JLabel("Nome del cane da cercare:");
        nome.setBounds(10, 10, 160, 20);
        textnome=new JTextField();
        textnome.setBounds(170, 10, 110, 20);
        //Pulsante
        cerca=new JButton("Cerca");
        cerca.setBounds(290, 10, 110, 20);
        cerca.addActionListener(this);

        //Add
        f.add(nome);
        f.add(textnome);
        f.add(cerca);
    }

    public void actionPerformed(ActionEvent e) {
        if(e.getSource().equals(cerca)){
            String x=textnome.getText();
            int pos=l.cerca(x);
            if(pos!=-1){
                f.dispose();//chiude la finestra
                visualizzatore(pos);
            }
        }
    }

    private void visualizzatore(int pos){
        //Frame
        f2=new JFrame();
        f2.setVisible(true);
        f2.setTitle("Visualizza un cane");
        f2.setSize(500, 300);
        f2.setDefaultCloseOperation(EXIT_ON_CLOSE);
        f2.setLayout(null);
        //Get
        Cane c=new Cane();
        temp=l.GetArray();
        temp.get(pos);
        //Lista.array.get(pos);
        String n=c.getNome();
        //Stampa
        JTextField textnomee=new JTextField(n);
        textnomee.setBounds(10, 10, 120, 20);
        //Add
        f2.add(textnomee);
    }


}
codice:
public class Lista extends JFrame implements Serializable {
    public ArrayList<Cane> array=new ArrayList();
    public int asd=5;

    Lista(){

    }
    public void aggiungi(Cane c){
        array.add(c);
        salva();
    }

    public void salva(){
        DatFile f=new DatFile("archivio");
        f.write(array);
    }
    
    public void carica(){
        DatFile f=new DatFile("archivio");
        f.read();
    }

    public int cerca(String cod){
        if(array.size()==0){
            JOptionPane.showMessageDialog(this, "Lista dei Cani vuota");
        }
         for(int i=0;i<array.size();i++){
             if((array.get(i).getNome()).equals(cod)){
                JOptionPane.showMessageDialog(this, "TROVATO! "+i);
                return (i);
             }
        }
        JOptionPane.showMessageDialog(this, "Impossibile trovare "+cod);
        return -1;
    }

    public ArrayList GetArray(){
        return array;
    }
}
codice:
public class Inserisci extends JFrame implements ActionListener, Serializable {
    private Lista l=new Lista();
    private JButton salva;
    private JTextField textnome,textmadre,textanno,textgiorno,textmese;
    private JFrame f;

    Inserisci(){
        elementi();
    }

    public void elementi(){
        //Frame
        f=new JFrame();
        f.setVisible(true);
        f.setTitle("Nuovo cane");
        f.setSize(500, 300);
        f.setDefaultCloseOperation(EXIT_ON_CLOSE);
        f.setLayout(null);
        //Inserimento del nome
        JLabel nome=new JLabel("Nome:");
        nome.setBounds(10, 10, 120, 20);
        textnome=new JTextField();
        textnome.setBounds(60, 10, 110, 20);
        //Inserimento Madre
        JLabel madre=new JLabel("Figlio di:");
        madre.setBounds(10, 40, 120, 20);
        textmadre =new JTextField();
        textmadre.setBounds(60, 40, 110, 20);
        //Data di Nascita
        JLabel nascita=new JLabel("Data Nascita:");
        nascita.setBounds(10, 70, 120, 20);
        textanno=new JTextField("aaaa");
        textanno.setBounds(70, 90, 40, 20);
        textmese=new JTextField("mm");
        textmese.setBounds(35, 90, 27, 20);
        textgiorno=new JTextField("gg");
        textgiorno.setBounds(10, 90, 20, 20);
        //pulsante salva
        salva =new JButton("Salva");
        salva.setBounds(200, 150, 80, 40);
        salva.addActionListener(this);

        //aggiunta elementi al frame
        f.add(nome);
        f.add(textnome);
        f.add(nascita);
        f.add(textanno);
        f.add(textmese);
        f.add(textgiorno);
        f.add(madre);
        f.add(textmadre);
        f.add(salva);
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource().equals(salva)){
            String nome=textnome.getText();
            String madre=textmadre.getText();
            String ann=textanno.getText();
            String mes=textmese.getText();
            String giorn=textgiorno.getText();
            try{
                int anno = Integer.parseInt(ann);
                int mese = Integer.parseInt(mes);
                int giorno = Integer.parseInt(giorn);
            }
            catch(Exception q){
                    JOptionPane.showMessageDialog(this, "Anno, Mese e giorno devono essere numeri.");
            }
            int anno = Integer.parseInt(ann);
            int mese = Integer.parseInt(mes);
            int giorno = Integer.parseInt(giorn);
            Cane c=new Cane(nome,madre,anno,mese,giorno);
            //f.dispose();//chiede la finestra
            f.setVisible(false);
            l.aggiungi(c);
        }
    }

}
codice:
public class Home extends JFrame implements Serializable,ActionListener {
    private JFrame f;
    private JButton inserisci,cerca;

    Home(){
        index();
    }

    public void index(){
        //Frame
        f=new JFrame();
        f.setVisible(true);
        f.setTitle("<<Dog>>");
        f.setSize(500, 300);
        f.setDefaultCloseOperation(EXIT_ON_CLOSE);
        f.setLayout(null);
        //Pulsante inserisci
        inserisci =new JButton("Inserisci");
        inserisci.setBounds(10, 20, 100, 30);
        inserisci.addActionListener(this);
        //Pulsante Cerca
        cerca =new JButton("Cerca");
        cerca.setBounds(150, 20, 100, 30);
        cerca.addActionListener(this);
        //Add
        f.add(inserisci);
        f.add(cerca);
    }

    public void actionPerformed(ActionEvent e) {
        if(e.getSource().equals(inserisci)){
            Inserisci i=new Inserisci();
        }
        if(e.getSource().equals(cerca)){
            Visualizza v=new Visualizza();
        }
    }

}
codice:
public class Cane implements Serializable {
    private String nome,madre;
    private int anno,mese,giorno;

    Cane(String nom,String madr,int ann,int mes,int giorn) {
        nome=nom;
        madre=madr;
        anno=ann;
        giorno=giorn;
        mese=mes;
    }
    Cane(){
    }

    public String getNome(){
        return nome;
    }

    public String getMadre(){
        return madre;
    }

    public int getAnno(){
        return anno;
    }

    public int getMese(){
        return mese;
    }

    public int getGiorno(){
        return giorno;
    }

}
codice:
public class DatFile  implements Serializable {

    String nf;

    DatFile(String s){

        nf=s.concat(".dat");
    }
        public void write(ArrayList A){
    
                try {

                    FileOutputStream f = new FileOutputStream(nf);
                    ObjectOutputStream fOUT = new ObjectOutputStream(f);

                    fOUT.writeObject(A);
                    fOUT.flush();

                    f.close();
                }
                catch (Exception e) {
                    System.out.println("Eccezione : "+e.getMessage());
                }


        }
        public ArrayList read(){
        
             ArrayList A = new ArrayList();

             try {

                FileInputStream f = new FileInputStream(nf);
                ObjectInputStream fIN = new ObjectInputStream(f);

                try {

                    A = (ArrayList) fIN.readObject();
                 }
                catch (Exception e) {

                    System.out.println("Eccezione : "+e.getMessage());
                }
                   
                f.close();
            }
            catch (Exception e) {

                System.out.println("Eccezione : "+e.getMessage());
            }
            return A;
        }

}