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

    [JAVA] Passare da un Jpanel ad un altro

    Buonasera a tutti ecco un'altro quesito da niubbo: ho costruito una finestra dove scegliere una figura geometrica per calcolarne i dati. Per la costruzione della finestra (quasi) nessun problema...ora vorrei che alla pressione di un bottone si cancellasse il primo JPanel e se ne visualizzasse un altro; posto il codice:

    codice:
    import java.awt.* ; //carico package
    import javax.swing.*;
    import java.awt.event.* ;
    public class Home extends JFrame  //estendo classe JFrame nella classe Home
    {
        //attributi
        
        public static String labelHome = "SELEZIONA UNA FIGURA" ;
        public static String labelTriangolo = "SELEZIONA UN TRIANGOLO" ;
        public static String buttonTriangolo = "Triangolo" ;
        public static String buttonQuadrato = "Quadrato" ;
        public static String buttonRettangolo = "Rettangolo" ;
        public static String buttonRombo = "Rombo" ;
        public static String buttonTrapezio = "Trapezio" ;
        public static String buttonCerchio = " Cerchio" ;
        JLabel label = null ;
        JLabel labelT = null ;
        JButton button1 = null ;
        JButton button2 = null ;
        JButton button3 = null ;
        JButton button4 = null ;
        JButton button5 = null ;
        JButton button6 = null ;
        
        //aspetto
        
        public Home() 
        {   
            super ("Calcolo dati figure geometriche") ;//costruzione finestra con titolo
            setSize (350,300) ;
            
            JPanel panHome = new JPanel () ; //costruzione pannello Home
            panHome.setLayout (null) ;
            label = new JLabel (labelHome) ; //costruzione etichetta
            label.setBounds (50,1,250,30) ;
            label.setFont (label.getFont().deriveFont(18.0f)) ;
            
                  
            button1 = new JButton (buttonTriangolo) ; //costruzione bottoni
            button1.setBounds (50,50,100,30) ;
            button1.addActionListener (new ActionListener () //azione bottone se premuto cancella panHome e visualizza panTriangolo
            {
                public void actionPerformed (ActionEvent e)
                {
                    panHome.setVisible (false) ;//QUI VORREI CHIUDERE IL JPANEL E VISUALIZZARNE UN ALTRO :confused::confused:
                   
                }
             });
            
            button2 = new JButton (buttonQuadrato) ; //assegnazione stringhe bottoni
            button2.setBounds (160,50,100,30) ;
            button3 = new JButton (buttonRettangolo) ;
            button3.setBounds (50,90,100,30) ;
            button4 = new JButton (buttonRombo) ;
            button4.setBounds (160,90,100,30) ;
            button5 = new JButton (buttonTrapezio) ;
            button5.setBounds (50,130,100,30) ;
            button6 = new JButton (buttonCerchio) ;
            button6.setBounds (160,130,100,30) ;
                    
            add (panHome, BorderLayout.CENTER) ; //visualizzazione pannello e contenuti Home
            panHome.add (label) ;
            panHome.add (button1) ;
            panHome.add (button2) ;
            panHome.add (button3) ;
            panHome.add (button4) ;
            panHome.add (button5) ;
            panHome.add (button6) ;
    
            }        
            public static void main (String [] args)
            {
                Home finestra1 = new Home  () ;
                finestra1.setVisible (true) ;
                finestra1.setDefaultCloseOperation (EXIT_ON_CLOSE) ;
    
            }  
    }

    Le mie domande sono: come faccio a creare un altro JPanel? come faccio a richiamarlo e visualizzarlo solo dopo la pressione del bottone?
    So che mi mancano molte basi ma se per favore qualcuno mi indirizza verso la via giusta poi provo a cavarmela....
    Grazie a tutti ciaoo
    Ultima modifica di LeleFT; 15-04-2014 a 16:41 Motivo: Aggiunti i tag CODE

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da vincentmaximo Visualizza il messaggio
    come faccio a creare un altro JPanel?
    Tecnicamente praticamente come hai fatto per l'altro. Se hai fatto un new JPanel() assegnando ad una variabile X, puoi benissimo fare un altro new JPanel() assegnando ad un'altra variabile Y.
    Idem se avessi avuto sotto classi specifiche di JPanel es. PrimoPannello, SecondoPannello.
    Non è questa la questione (e difficoltà) principale.

    Quote Originariamente inviata da vincentmaximo Visualizza il messaggio
    come faccio a richiamarlo e visualizzarlo solo dopo la pressione del bottone?
    Per scambiare componenti dinamicamente ci sono diverse tecniche, ne dico giusto 3 (senza andarne a cercare altre di strane o complicate).
    1) Usare CardLayout che è un layout manager in grado di gestire facilmente la visualizzazione di 1 solo componente tra N inseriti.
    2) Rimuovere "fisicamente" il vecchio componente dal contenitore e aggiungerne un altro. Questo di norma richiede la rivalidazione del layout (se c'è un layout manager nel contenitore) e spesso un repaint (sicuramente se non c'è un layout manager).
    3) Tenere tutti gli N componenti inseriti in un contenitore e "giocare" solo sulla loro visibilità, ovvero solo uno ha setVisible(true), gli altri hanno false. Questo va bene se si usa il posizionamento assoluto (il contenitore non ha un layout manager) oppure con un layout manager in grado di tenere gli N componenti senza problemi (es. in fila ma nascosti).

    Vedi anche il mio esempio "Panel Switch" tra i miei Java Examples, che mostra le 3 tecniche.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Ti ringrazio per la risposta; mi rendo conto che più vado avanti e più problemi mi si presentano.
    Grazie ancora comunque ciaoo

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    @vincentmaximo: quando posti del codice, usa gli appositi tag CODE, per preservare indentazione e formattazione, che altrimenti vengono persi rendendo il codice praticamente illeggibile.

    Uso dei tag CODE:

    [CODE]
    codice
    [/CODE]


    oppure, clicca sul pulsante giallo "Modalità Avanzata" in basso a destra e avrai a disposizione il pulsantino "#" che fa questo al posto tuo.


    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.