Cet exemple de code vous montre comment changer le contenu d'un layout dans une application Swing. La gestion des événements est faites via une référence sur méthode (syntaxe ::) : un Java SE 8.0 minimum est donc requis pour faire tourner cet exemple.
Le point le plus important de cet exemple, consiste à demande de réactualiser le contenu de la fenêtre après le changement : les appels à
revalidate
(ligne 58) et à repaint
(ligne 59) sont donc nécessaires. Ne les obliez pas.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
import java.awt.BorderLayout; import java.awt.Component; import java.awt.event.ItemEvent; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTree; import javax.swing.UIManager; import javax.swing.plaf.nimbus.NimbusLookAndFeel; public class DemoSwing extends JFrame { private JComboBox<String> comboBox = new JComboBox<>( new String[] { "First", "Second", "Third" } ); private JScrollPane tree = new JScrollPane( new JTree() ); private JScrollPane textArea = new JScrollPane( new JTextArea("Content to edit") ); private JButton button = new JButton( "Click Me" ); private JPanel contentPane; private Component currentInjectedComponent = null; public DemoSwing() { super( "Demo changement contenu" ); this.setSize( 400, 300 ); this.setLocationRelativeTo( null ); this.setDefaultCloseOperation( DISPOSE_ON_CLOSE ); contentPane = (JPanel) getContentPane(); contentPane.add( comboBox, BorderLayout.NORTH ); // Utilisation de référence sur méthode pour la gestion des événements (requière un Java SE 8) comboBox.addItemListener( this::comboBoxItemStateChange ); this.setVisible( true ); } public void comboBoxItemStateChange( ItemEvent event ) { if ( event.getStateChange() == ItemEvent.SELECTED ) { if ( currentInjectedComponent != null ) { contentPane.remove( currentInjectedComponent ); } switch( (String) event.getItem() ) { case "First": currentInjectedComponent = tree; contentPane.add( tree, BorderLayout.CENTER ); break; case "Second": currentInjectedComponent = textArea; contentPane.add( textArea, BorderLayout.CENTER ); break; default: currentInjectedComponent = button; contentPane.add( button, BorderLayout.CENTER ); } contentPane.revalidate(); currentInjectedComponent.repaint(); } } public static void main( String[] args ) throws Exception { UIManager.setLookAndFeel( new NimbusLookAndFeel() ); new DemoSwing(); } } |
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :