Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di iMet
    Registrato dal
    Jan 2009
    Messaggi
    168

    JButton per tornare indietro

    Ciao a tutti, spiego brevemente il mio problema, ho quest'actionlistener con cui passo dal panel1 al panel2 e vorrei inserire un bottone "back" che mi porti indietro al panel1.

    codice:
    //Button action
    		button.addActionListener(new ActionListener(){
    	public void actionPerformed(ActionEvent e) {
    		
    		//JPanel panel2 = new JPanel();
    		
    		//Panel2 settings
    		//JButton button3 = new JButton("Back");
    		//panel2.add(button3);
    		//panel2.setBackground(Color.RED);
    		
    		Main.getContentPane().removeAll();
    		Main.getContentPane().add(panel2);
    		Main.getContentPane().validate();
    		
    	}
    });
    Grazie a tutti.

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

    Re: JButton per tornare indietro

    Originariamente inviato da iMet
    Ciao a tutti, spiego brevemente il mio problema, ho quest'actionlistener con cui passo dal panel1 al panel2 e vorrei inserire un bottone "back" che mi porti indietro al panel1.
    Il codice lo sai già .... con la tecnica del rimuovere/aggiungere componenti in un contenitore, togli il/i componente/i, aggiungi e poi: a) se il contenitore ha un layout manager: validate() o b) se non c'è un layout manager: repaint().
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di iMet
    Registrato dal
    Jan 2009
    Messaggi
    168

    Re: Re: JButton per tornare indietro

    Originariamente inviato da andbin
    Il codice lo sai già .... con la tecnica del rimuovere/aggiungere componenti in un contenitore, togli il/i componente/i, aggiungi e poi: a) se il contenitore ha un layout manager: validate() o b) se non c'è un layout manager: repaint().
    Il layout del panel è settato su (null) visto che gestisco la grafica manualmente, per questo motivo non so come riproporre la stessa grafica quando torno indietro.

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

    Re: Re: Re: JButton per tornare indietro

    Originariamente inviato da iMet
    Il layout del panel è settato su (null) visto che gestisco la grafica manualmente, per questo motivo non so come riproporre la stessa grafica quando torno indietro.
    Una cosa è se il tuo pannello usa o no un layout manager .... un'altra se il contenitore (che contiene il pannello) usa o no un layout manager.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di iMet
    Registrato dal
    Jan 2009
    Messaggi
    168

    Re: Re: Re: Re: JButton per tornare indietro

    Originariamente inviato da andbin
    Una cosa è se il tuo pannello usa o no un layout manager .... un'altra se il contenitore (che contiene il pannello) usa o no un layout manager.
    Io ho settato panel.setLayout(null); e successivamente ho aggiunto bottoni colore sfondo ecc al panel.

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

    Re: Re: Re: Re: Re: JButton per tornare indietro

    Originariamente inviato da iMet
    Io ho settato panel.setLayout(null); e successivamente ho aggiunto bottoni colore sfondo ecc al panel.
    Non è questo che conta per quanto hai chiesto. Conta il "contenitore" dove vengono tolti/aggiunti i pannelli.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it L'avatar di iMet
    Registrato dal
    Jan 2009
    Messaggi
    168

    Re: Re: Re: Re: Re: Re: JButton per tornare indietro

    Originariamente inviato da andbin
    Non è questo che conta per quanto hai chiesto. Conta il "contenitore" dove vengono tolti/aggiunti i pannelli.
    Con contenitore intendi il JFrame?
    Perchè io l'ho strutturato in questo modo, JFrame > Jpanel(panel) (con tasto che porta al...) > secondo JPanel(panel2).

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

    Re: Re: Re: Re: Re: Re: Re: JButton per tornare indietro

    Originariamente inviato da iMet
    Con contenitore intendi il JFrame?
    Perchè io l'ho strutturato in questo modo, JFrame > Jpanel(panel) (con tasto che porta al...) > secondo JPanel(panel2).
    JFrame è sì, tecnicamente, un "container" ma JFrame ha una struttura complessa, contiene un JRootPane che a sua volta, tra altre cose, contiene il "content pane". Quest'ultimo è il contenitore "base" in cui di norma si aggiungono i componenti.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it L'avatar di iMet
    Registrato dal
    Jan 2009
    Messaggi
    168

    Re: Re: Re: Re: Re: Re: Re: Re: JButton per tornare indietro

    Originariamente inviato da andbin
    JFrame è sì, tecnicamente, un "container" ma JFrame ha una struttura complessa, contiene un JRootPane che a sua volta, tra altre cose, contiene il "content pane". Quest'ultimo è il contenitore "base" in cui di norma si aggiungono i componenti.
    Facciamo prima se posto il codice:
    Questo è tutto ciò che viene prima del Action

    codice:
    public class Main extends JFrame {
    
    private static final long serialVersionUID = 1L;
        public static void main(String[] args){
            final JFrame Main = new JFrame("TEST");
            Main.setVisible(true);
            Main.setSize(600, 600);
            Main.setLocationRelativeTo(null);
            Main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    
    
    //Adding JPanel     
            JPanel panel = new JPanel();
            Main.add(panel);
    
    //JPanel settings
            panel.setLayout(null);
            panel.setBackground(Color.GREEN);
    
    //Adding JButton
            JButton button = new JButton("Button 1");
            JButton button2 = new JButton("Button2");
            panel.add(button);
            panel.add(button2);
    
    //JButton settings
            button.setBounds(70, 160, 200, 200);
            button2.setBounds(320, 160, 200, 200);
    
    
        }
    }

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

    Re: Re: Re: Re: Re: Re: Re: Re: Re: JButton per tornare indietro

    Originariamente inviato da iMet
    codice:
            final JFrame Main = new JFrame("TEST");
    
            Main.add(panel);
    L'add l'hai fatto direttamente sul JFrame, questo di per sé non è sbagliato. Infatti la documentazione di JFrame dice:
    "As a conveniance add and its variants, remove and setLayout have been overridden to forward to the contentPane as necessary.".
    Cioè un add sul JFrame internamente fa un add sul content pane. Questo "forward" è stato aggiunto solo da Java 5, perché in passato, prima di Java 5, non era così (EDIT: e il tuo add sarebbe stato inappropriato).

    Quindi magari, se vuoi, abituati a prendere esplicitamente il content pane (io faccio in genere così appunto).

    Per tornare al tuo caso, comunque, non hai cambiato/tolto layout manager nel content pane, quindi resta di serie il BorderLayout. Pertanto ogni volta che aggiungi/togli rimuovi componenti nel content pane (esplicitamente o tramite forward da add/remove sul JFrame), allora devi invocare validate(). Nessuno vieta di invocare validate() sul JFrame (la validazione parte solo più "a monte") ma se lo fai sul content pane è preferibile.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.