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

Discussione: Switch tra jpanel

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    111

    Switch tra jpanel

    Ragazzi allora sto creando un'applicazione così fatta: ( Perdonate l'immagine ma davvero di meglio non sono riuscito a fare )




    Sul JPanel_2 ho una serie di bottoni che quando premuti fanno cambiare JPanel_1, praticamente elimino il pannello ( ho creat un metodo apposito nel JFrame ) e lo ricreo, passandogli il jpanel che voglio visualizzare ( quello nuovo per intenderci ).

    Ora nasce un problema molto serio, se sono in jpanel_1 e voglio magari richiamare un'altro pannello ( es jpanel_4) tramite la pressione di un tasto ad esempio AVANTI, non riesco a farlo, io vorrei che il jpanel_1 venisse rimosso e venisse caricato jpanel_4.
    Purtroppo però non riesco a farlo, sapreste aiutarmi? Grazie infinite
    Si vis Pacem Para Bellum

  2. #2
    allora che layout hai utilizzato per la gestione dei due jpanel?

    un grid suppongo

    puoi "rimuovere tutto" con un removeAll() e riaggiungere sia il "pannelloPulsanti" che il pannello ioteressatoil, ricordando di dare un revalidate dopo averli richiamati.

    prova così

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    111
    allora che layout hai utilizzato per la gestione dei due jpanel?
    Purtroppo ho utilizzato Absolute Layout. Se mi fai capire in che modo dovrei usare il Grid, lo faccio volentieri perchè ho letto che potrebbe essere questo il problema.


    Inoltre già rimuoviamo tutto ( con il metodo che avevo citato nel primo posto ) e "ridisegniamo" l'interfaccia grafica, solo che questo metodo funziona bene finchè a chiamarlo sono i bottoni che stanno nel menù a dx ( ovvero jpanel_2 ); se questo metodo è richiamato da un bottone interno al jpanel_1 per aprire un'altro jpanel ( es jpanel_4 ) sembra non funzionare, o meglio non rimuove il pannello 1 per caricare il 4.

    Come posso procedere?
    Si vis Pacem Para Bellum

  4. #4
    jframe.setLayoutManager(new GridLayout(1,2));

    hai 2 colonne ed una riga...ovvero quello che serve a te. quando andrai ad aggiungere un nuovo componente lo inseriraà in posizione 1-1, poi in 1-2...se cerchi in rete "guida swing pgi-bis" troverai una guida esauriente

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    111
    Grazie mille, allora io adesso prutroppo non sono al pc dove lavoro di solito, quindi non posso testare questa tua dritta, in serata, provero' e ti faccio sapere se riesco!
    Se altri hanno ulteriori idee sono tutto orecchie!
    Si vis Pacem Para Bellum

  6. #6
    prendi la mia soluzione con le pinze...purtroppo ho la mania di scrivere "di geto", quindi non sono assolutamente sicuro che la soluzione proposta sia valida (teoricamente si )

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    111
    Guarda, oramai ho provato di tutto, solo il grid mi manca, qualcosa di simile l'ho già provato, ma voglio testare direttamente il metodo grid e vediamo se riesco a fargli fare quello che voglio. Insomma alla fine dovrebbe essere come il wizard delle installazioni, fai avanti e mostra un'altra schermata. Il mio programma questo non lo vuole fare. Che ODIO!
    Si vis Pacem Para Bellum

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Perchè non usare, per la parte che cambia, un semplicissimo CardLayout che è fatto apposta per gestire queste cose?

    In questo tutorial è spiegato come si usa il CardLayout.

    Il tutto si risolve nell'usare un BorderLayout per la finestra.
    Piazzare il pannllo con i pulsanti (JPanel_2) in BorderLayout.EAST ed un pannello gestito con CardLayout (chiamiamolo PanelCard) nel BorderLayout.CENTER.

    Ad ogni pressione dei pulsanti, verrà invocato un apposito metodo del PanelCard che farà visualizzare il pannello relativo.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    giusto non avevo pensato al cardlayout.

    però ora ti domando...i layout "sotto" non vengono deallocati, quindi restano in memoria con relativa occupazione?

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Sì... l'idea è quella di avere già tutti i pannelli (anche quelli non visibili) già allocati e pronti per essere visualizzati.

    Chiaramente, si può anche evitare di fare questo, allocando sul "PanelCard" (continuo a chiamarlo così per semplicità) solo il pannello inizialmente visibile e andando ad allocare dinamicamente (su richiesta) il nuovo pannello da visualizzare e renderlo subito visibile.

    Un esempio molto scarno:

    codice:
    CardLayout cardLayout = new CardLayout();
    JPanel panelCard = new JPanel( cardLayout );
    
    // Situazione iniziale
    PrimoPannello primoPannello = new PrimoPannello( ... )
    panelCard.add(primoPannello, "0");
    Clicco su un pulsante il quale richiama il metodo "mostraSecondoPannello":

    codice:
    public void mostraSecondoPannello() {
       secondoPannello = new SecondoPannello( ... );
       panelCard.add(secondoPannello, "1");
       cardLayout.show(panelCard, "1");
    }
    Eventualmente posso "deallocare" quello non visibile, se proprio necessito di risparmiare quanta più memoria possibile; altrimenti posso decidere di lasciarlo allocato così è già pronto all'uso in caso si successiva rivisualizzazione (evito, così, l'overhead di dover ricostruire nuovamente un pannello che ho già costruito).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.