Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [Java] Problema passagio fra pannelli

    ciao raga
    ho un problema!!!

    la mia applicazione crea un frame con dei pannelli. ogni pannello ha un bottone chiudi, che una volata cliccato deve riportarmi al pannello index con cui si inizializza il frame.

    se uso this.setVisible(false); non mi visualizza piu il pannello, non torna al pannello index, ma visualizza il frame grigio.

    come faccio?

    Premetto che ho letto gia ne forum e non c'è niente che mi aiuti, perche il bottone chiudi è contenuto nei vari pannelli e non nel pannello index.

    spero di essere stato chiaro ciao e grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Dipende dallo scenario. Allora tu hai un frame, in ingresso questo frame ha caricato il pannello index, al verificarsi di un evento(click sul bottone,scelta da menu, ecc) nel frame viene sostituito index con un pannello che chiamiamo p1, ha un bottone chiudi e quando chiudi vorresti tornare a index. Quindi ho nel listener del bottone chiudi metti del codice per rivisualizzare l'index o usi un JLayeredPane .
    Nella seconda delle ipotesi carichi il pannello a livello piu' basso e carichi gli altri pannelli sopra. Quando chiudi il pannello sopra dovresti rivedere il pannello sotto che e' index.
    P.s. con setVisible(false) non chiudi il pannello, ma lo rendi invisibile. Per chiuderlo usa dispose().

  3. #3
    Dipende dallo scenario. Allora tu hai un frame, in ingresso questo frame ha caricato il pannello index, al verificarsi di un evento(click sul bottone,scelta da menu, ecc) nel frame viene sostituito index con un pannello che chiamiamo p1, ha un bottone chiudi e quando chiudi vorresti tornare a index. Quindi ho nel listener del bottone chiudi metti del codice per rivisualizzare l'index o usi un JLayeredPane .
    giusto, ma che codice metto nel listener del bottone per ritornare a index?

  4. #4
    io caricando il nuovo pannello , nel listener del bottone metto:

    //rende invisibile i pannelli
    index.setVisible(false);
    //aggiunge il pannello per la modifica
    panel1=new Pannello1();
    this.add(panel1,BorderLayout.CENTER);
    panel1.setVisible(true);

    va bene?

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Nella tua classe JFrame metti un metodo reset() che ti visualizza index nella parte centrale.
    Alla tua classe Pannello1() passi un riferimento al frame, dentro il listener di quest'ultima, rendi invisibile il pannello e chiami il reset del frame.

  6. #6
    Allora creo il metodo
    public void reset(){
    contentPane.add(index,BorderLayout.CENTER);
    }
    e nel costruttore metto this.reset();

    ora come lo passo il riferimento che non mi riesce?

    ti ringrazio anticioatamente!!!

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    panel1=new Pannello1(Qui ci metti una variabile che punta al frame principale);
    Dentro Pannello1 modifichi il costruttore perche' memorizzi in una variabile d'istanza privata il frame, dentro l'actionListener del bottone che chiude chiami tuoFrame.reset().
    P.s. in reset, metti anche un index.setVisible(true) e un contentPane.repaint() per sicurezza.

  8. #8
    ok grazie funziona benissimo.

    Scrivo il codice interessato che ho usato per le persone che leggeranno in fututo.

    nel pannello principale:

    JPanel index = new JPanel();
    JPanel panel2 = new JPanel(this);
    public Pannelloindex(){ //costruttore del frame
    this.reset();
    }
    public void reset(){
    contentPane.add(index,BorderLayout.CENTER);
    index.setVisible(true);
    contentPane.repaint();
    }

    nel pannello secondario:
    JPanel tmp2;
    public panel2(Pannelloindex tmp){ //costruttore del secondo panello
    tmp2=tmp;
    }

    nell actionListener Si mette:

    this.setVisible(false);
    tmp2.reset();


    Spero di essere stato chiaro. ciao

  9. #9
    scusa e se al posto di fare this.setVisible(false); come posso chiudere il pannello(no il Frame) in modo da liberare le risorse ?

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Sopra ti avevo inavvertitamente detto dispose(), ma in realta quest'ultimo metodo funziona per Frame e Dialog, non per Panel. Mi pare che il max che puoi ottenere sia rimuovere il pannello dal frame con
    codice:
    tuoFrame.remove(tuoPannello);
    praticamente il metodo opposto di add.
    Volendo poi puoi settare la variabile a null per far rimuovere l'oggetto dal garbage collector, ma almeno che tu non abbia esigenze particolari, mi fermerei a remove. Tanto il reference lo perdi comunque quando mostri un altro pannello.

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.