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

    Swing passare da un panel all'altro

    Salve sono alle prime armi con swing e awt, vorrei sapere come risolvere questo piccolo esempio banale.
    Ho un'applet con diversi pannelli che contengono qualcosa tipo jlabel radiobutton e un jbutton per passare da un pannello all'altro, vorrei sapere come richiamare dal pannello1 il pannello2 e cosi via.
    L'utente dopo aver cliccato sul radiobutton del primo pannello tramite il pulsante deve poter arrivare al pannello2.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da supernio Visualizza il messaggio
    Ho un'applet con diversi pannelli che contengono qualcosa tipo jlabel radiobutton e un jbutton per passare da un pannello all'altro, vorrei sapere come richiamare dal pannello1 il pannello2 e cosi via.
    L'utente dopo aver cliccato sul radiobutton del primo pannello tramite il pulsante deve poter arrivare al pannello2.
    Le strade sono almeno 2:
    a) Usare un layout manager come CardLayout che permette di mostrare solo uno per volta tra N componenti.
    b) Rimuovere il pannello corrente dal contenitore e inserirne un altro. Se il contenitore usa un layout manager è anche necessario validare il layout, in genere basta un validate() sul contenitore.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Le strade sono almeno 2:
    a) Usare un layout manager come CardLayout che permette di mostrare solo uno per volta tra N componenti.
    b) Rimuovere il pannello corrente dal contenitore e inserirne un altro. Se il contenitore usa un layout manager è anche necessario validare il layout, in genere basta un validate() sul contenitore.
    Se volessi usare l'opzione b dovrei fare una cosa del genere?

    codice:
    btnNewButton.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {
                    getContentPane().remove(panel);
                    validate();
                    getContentPane().add(panel_1);
                    validate();
    
    
                }
    });
    perchè in tal caso dopo aver premuto il bottone l'applet si blocca.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da supernio Visualizza il messaggio
    Se volessi usare l'opzione b dovrei fare una cosa del genere?
    codice:
    getContentPane().remove(panel);
    getContentPane().add(panel_1);
    getContentPane().validate();
    (di validate() ne basta solo 1 alla fine delle modifiche)

    Quote Originariamente inviata da supernio Visualizza il messaggio
    perchè in tal caso dopo aver premuto il bottone l'applet si blocca.
    Bisognerebbe vedere il resto del codice ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Questo è il codice completo..

    codice:
    import javax.swing.JApplet;import javax.swing.JPanel;
    import javax.swing.JLabel;
    import javax.swing.JRadioButton;
    import javax.swing.JButton;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    
    
    
    
    publicclasskmkextends JApplet{
    
    
    /**
    	 * Create the applet.
    	 */
    	public kmk() {
    		getContentPane().setLayout(null);
    
    		final JPanel panel = new JPanel();
    		panel.setBounds(0, 0, 450, 300);
    		getContentPane().add(panel);
    		panel.setLayout(null);
    
    		JRadioButton rdbtnNewRadioButton = new JRadioButton("Option A");
    		rdbtnNewRadioButton.setBounds(20, 49, 141, 23);
    		panel.add(rdbtnNewRadioButton);
    
    		JLabel lblDomanda = new JLabel("1 domanda");
    		lblDomanda.setBounds(174, 6, 70, 16);
    		panel.add(lblDomanda);
    
    		JRadioButton rdbtnNewRadioButton_1 = new JRadioButton("Option B");
    		rdbtnNewRadioButton_1.setBounds(20, 96, 141, 23);
    		panel.add(rdbtnNewRadioButton_1);
    
    		JRadioButton rdbtnNewRadioButton_2 = new JRadioButton("Option C");
    		rdbtnNewRadioButton_2.setBounds(20, 157, 141, 23);
    		panel.add(rdbtnNewRadioButton_2);
    
    
    
    		final JPanel panel_1 = new JPanel();
    		panel_1.setBounds(-1240, -800, 450, 300);
    		getContentPane().add(panel_1);
    		getContentPane().setVisible(true);
    		panel_1.setLayout(null);
    
    
    		JRadioButton rdbtnNewRadioButton_11 = new JRadioButton("Option A");
    		rdbtnNewRadioButton_11.setBounds(20, 49, 141, 23);
    		panel_1.add(rdbtnNewRadioButton_11);
    
    		JLabel lblDomanda_11 = new JLabel("2 domanda");
    		lblDomanda_11.setBounds(174, 6, 70, 16);
    		panel_1.add(lblDomanda_11);
    
    		JRadioButton rdbtnNewRadioButton_111 = new JRadioButton("Option B");
    		rdbtnNewRadioButton_111.setBounds(20, 96, 141, 23);
    		panel_1.add(rdbtnNewRadioButton_111);
    
    		JRadioButton rdbtnNewRadioButton_22 = new JRadioButton("Option C");
    		rdbtnNewRadioButton_22.setBounds(20, 157, 141, 23);
    		panel_1.add(rdbtnNewRadioButton_22);
    
    		final JPanel panel_2 = new JPanel();
    		panel_2.setBounds(-1240, -800, 450, 300);
    		getContentPane().add(panel_2);
    		panel_2.setLayout(null);
    
    		JButton btnNewButton = new JButton("Next");
    		btnNewButton.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				getContentPane().remove(panel);
    				getContentPane().add(panel_1);
    				validate();
    
    
    			}
    		});
    		btnNewButton.setBounds(327, 265, 117, 29);
    		panel.add(btnNewButton);
    
    
    	}
    
    
    
    }

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da supernio Visualizza il messaggio
    Questo è il codice completo..
    Ok, ora è chiaro:

    Innanzitutto avendo tolto il layout manager dal content pane (con setLayout(null) ) non serve più il validate() ma basta un più banale repaint().

    codice:
    getContentPane().remove(panel);
    getContentPane().add(panel_1);
    getContentPane().repaint();
    (in questo caso basterebbe anche solo un repaint su panel_1 ma sul content pane non è comunque sbagliato).

    Inoltre:
    panel_1.setBounds(-1240, -800, 450, 300);
    Ovviamente con quelle coordinate è tutto sparato "fuori" dall'area visibile!

    E non è necessario fare:
    getContentPane().add(panel_2);

    Metti nel content pane solo 1 pannello per volta.
    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 andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Visto che non hai usato un layout manager per il contenitore (content pane), un 3° approccio (che non ti ho menzionato prima) è quello di inserire tutti i pannelli nel contenitore e poi "giocare" sulla visibilità con setVisible, tenendone solo uno visibile per volta. Tra l'altro questo è proprio l'approccio usato, dietro le quinte, da CardLayout.

    Credo che nel tuo caso sia la soluzione più veloce e pratica.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Visto che non hai usato un layout manager per il contenitore (content pane), un 3° approccio (che non ti ho menzionato prima) è quello di inserire tutti i pannelli nel contenitore e poi "giocare" sulla visibilità con setVisible, tenendone solo uno visibile per volta. Tra l'altro questo è proprio l'approccio usato, dietro le quinte, da CardLayout.

    Credo che nel tuo caso sia la soluzione più veloce e pratica.
    Grazie mille ho usato questo metodo poichè come hai detto è più veloce e pratico.

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.