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

    Rimuovere un pannello e sostituirlo con un altro

    Ciao a tutti!

    Sto scrivendo un'applicazione Java ed ho un problema.

    Ho un JInternalFrame con un pannello che chiede di compilare alcuni campi.
    Alla fine di tutto l'utente preme il pulsante NEXT e...

    vorrei cambiare il pannello del JInternalFrame con un'altro già pronto...

    Secondo voi, perchè questo codice non funziona??

    codice:
    altroPannello = new MioPannello(); // MioPannello ovviamente estende JPanel
    iframe.setVisible(false);
    iframe.remove(0);
    //iframe.removeAll(); // questo è ancora peggio
    iframe.add(altroPannello);
    iframe.setVisible(true);
    Il risultato è che mi toglie il pannello precedente ma non aggiunge quello nuovo!!

    Help please...
    Il cinghiale è un animale raffinato

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Rimuovere un pannello e sostituirlo con un altro

    Originariamente inviato da SimoVinci
    vorrei cambiare il pannello del JInternalFrame con un'altro già pronto...
    In genere la principale questione è quella di "rivalidare" il layout in cui hai cambiato "qualcosa" (aggiunto/tolto ecc... componenti). In genere basta fare un validate() sul container ma dipende anche dal layout-manager impostato.

    Comunque se si è nella situazione di avere più componenti che devono condividere lo stesso spazio ma di cui poterne avere solo uno per volta visibile, allora si può anche usare un CardLayout.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Non funziona neanche così...

    codice:
    iframe.setVisible(false);
    iframe.remove(0);
    iframe.validate();
    iframe.add(new JScrollPane(new  MioPannello()));
    iframe.validate();
    iframe.setVisible(true);
    iframe, che è di tipo JInternalFrame, ha come layout una normale FlowLayout........ Mi sembra strano che il metodo add non aggiunga più niente...


    ... comunque... mi faresti un esempio di CardLayout?
    Io ho un array di JPanel che devono passare in sequenza uno per volta di fronte all'utente.

    Grazie per l'aiuto.
    Il cinghiale è un animale raffinato

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da SimoVinci
    iframe, che è di tipo JInternalFrame, ha come layout una normale FlowLayout........ Mi sembra strano che il metodo add non aggiunga più niente...
    Il problema è sempre l'aggiornamento "visivo" del layout, non tanto il fatto di aggiungere/togliere qualcosa.

    Comunque fai così che dovrebbe funzionare:
    - prendi il content pane (getContentPane() ) e fai le seguenti operazioni con il Container ottenuto.
    - rimuovi il componente.
    - aggiungi un nuovo componente.
    - chiama prima validate() e poi repaint().

    Originariamente inviato da SimoVinci
    ... comunque... mi faresti un esempio di CardLayout?
    Leggi qui sul tutorial. Se poi non fosse chiaro posso anche provare a fare un esempio.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    HA FUNZIONATO!!!

    Grazie mille, sai qual era il problema??? Non facevo .getContentPane() , facevo il remove sul JInternalFrame!!

    Riporto in seguito il mio codice giusto:

    codice:
    iframe.getContentPane().remove(0); // il primo e unico pannello che gli ho messo
    iframe.getContentPane().add(new JScrollPane(secondoPannello));
    iframe.validate();
    Grazie ancora!!

    Alla prossima
    Il cinghiale è un animale raffinato

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.