ciao a tutti ho una classe che stampa dei dati inseriti... cè un pulsante ordina e ,quando viene premuto,l'arraylist viene riordinato quindi ho bigogno di ristampare all'inizio avevo fatto una dispose() e richiamo la classe ma, oltre ad essere brutta la riapertura della finestra, perdevo dati che mi servivano. quindi come soluzione ho inserito un jpanel e mi sono fatto la funzione aggiorna che rimuove il pannello e richiama la funzione che lo ricrea (ovviamente ho messo anche la repaint() )
il problema è che quando si chiama la aggiorna() il frame rimane vuoto e si aggiorna solo se viene ridimensionato.

ecco il codice:
codice:
public class StampaTutti implements ActionListener{
    private Lista l=null;
    private JButton visualizza[],elimina[],ordnome,orddata;
    private JFrame f;
    private JCheckBox morto,regalato;
    private JLabel n,nato;
    private boolean nomorti=false;
    private JPanel p;

    StampaTutti(Lista l){
        this.l=l;
        f=new JFrame();
        f.setVisible(true);
        f.setTitle("Visualizza Tutti");
        f.setSize(700, 450);
        f.setDefaultCloseOperation(1);
        Image ico=Toolkit.getDefaultToolkit().getImage("logo.gif");
        f.setIconImage(ico);
        elementi();
    }

    public void elementi(){
        p=new JPanel();
        f.add(p);
        p.setLayout(null);
        visualizza=new JButton[l.array.size()];
        elimina=new JButton[l.array.size()];
        int x=0;
        for(int i=0;i<l.array.size();i++){
            if(i==0){
                x=3;//abbassa la prima righa
            }
            //gestione filtri
            if(nomorti==true){
                if(l.array.get(i).getMorto().compareTo("")==0){
                    visual(i,x);
                }
            }
            else{
                visual(i,x);
            }
        }
        //GESTIONE
        JLabel filtro=new JLabel("Filtri ");
        filtro.setBounds(10, 10, 70, 15);
        p.add(filtro);
        morto=new JCheckBox();
        morto.setText("Morto");
        morto.setBounds(70, 10, 70, 15);
        morto.setSelected(nomorti);
        p.add(morto);
        morto.addActionListener(this);
        regalato=new JCheckBox();
        regalato.setText("Regalato");
        regalato.setBounds(150, 10, 70, 15);
        p.add(regalato);
        regalato.addActionListener(this);
        JLabel ordina=new JLabel("Ordina per");
        ordina.setBounds(10, 40, 70, 15);
        p.add(ordina);
        ordnome=new JButton("Nome");
        ordnome.setBounds(70, 40, 70, 15);
        p.add(ordnome);
        ordnome.addActionListener(this);
        orddata=new JButton("Età");
        orddata.setBounds(140, 40, 70, 15);
        p.add(orddata);
        orddata.addActionListener(this);
    }

     public void actionPerformed(ActionEvent e) {
         int x;
         for(x=0;x<l.array.size();x++){
            if(e.getSource().equals(visualizza[x])){
                Visualizza v=new Visualizza(l,x,this);
            }
            if(e.getSource().equals(elimina[x])){
                int sc=JOptionPane.showConfirmDialog(f,"Sicuro di cancellare questo cane? Verrà definitivamente cancellato!");
                if(sc==JOptionPane.YES_OPTION){
                    l.elimina(l.array.get(x));
                    aggiorna();
                }
            }
         }
         if(e.getSource().equals(ordnome)){
             l.ordina();
             //ridisegna
             aggiorna();
         }
         if(e.getSource().equals(morto)){
             if(morto.isSelected()){
                 morto.setSelected(true);
                 nomorti=true;
             }
             else{
                nomorti=false;
                morto.setSelected(false);
             }
         }
    }


     public void aggiorna(){
         f.remove(p);
         f.repaint();
         elementi();
     }
     public void visual(int i,int x){
         String nome=l.array.get(i).getNome();
            n=new JLabel("Nome:  "+nome);
            n.setBounds(20, 20*(i+1+x), 150, 15);
            p.add(n);
            int na=l.array.get(i).getAnno();
            nato=new JLabel("Anno di nascita   "+na);
            nato.setBounds(200, 20*(i+1+x), 150, 15);
            p.add(nato);
            //visualizza
            visualizza[i]=new JButton("Visualizza");
            visualizza[i].setBounds(400, 20*(i+1+x), 100, 15);
            p.add(visualizza[i]);
            visualizza[i].addActionListener(this);
            //elimina
            elimina[i]=new JButton("Elimina");
            elimina[i].setBounds(550, 20*(i+1+x), 100, 15);
            p.add(elimina[i]);
            elimina[i].addActionListener(this);
     }
}