SOS internautes
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Derniers sujets
» Emulateur CD-I : CD-I Emulator
Remplacer un JPanel par un autre EmptyLun 19 Déc - 11:24 par bigblaireau

» Présentation
Remplacer un JPanel par un autre EmptyLun 19 Déc - 11:10 par bigblaireau

» probleme incredimail
Remplacer un JPanel par un autre EmptyMar 22 Mar - 19:06 par vanille57540

» (supprimé)
Remplacer un JPanel par un autre EmptyVen 18 Mar - 20:06 par louis1806

» présentation
Remplacer un JPanel par un autre EmptyVen 18 Mar - 10:47 par louis1806






-28%
Le deal à ne pas rater :
Précommande : Smartphone Google Pixel 8a 5G Double Sim 128Go ...
389 € 539 €
Voir le deal
Le Deal du moment :
Cartes Pokémon : la prochaine extension ...
Voir le deal

Remplacer un JPanel par un autre

Aller en bas

Remplacer un JPanel par un autre Empty Remplacer un JPanel par un autre

Message  Zepalkia Sam 21 Jan - 14:50

Enfin un tutoriel un peu plus intéressant et très pratique puisque j'en ai souvent eu besoin dans mes derniers logiciels, je vais vous expliquer ici comment faire, dans votre JFrame principal, pour retirer un JPanel (qui contient un niveau d'un jeu par exemple) et le remplacer par un autre (qui contiendrait le niveau suivant toujours dans cet exemple).

Ce n'est pas si simple à faire et c'est pourquoi je vais tout bien vous expliquer ici, tout d'abord cela ne peut être demandé que dans un KeyListener, un MouseListener ou un ActionListener puisqu'il faut que quelque chose déclenche le changement de panel (l'appui d'une touche ou d'un JButton par exemple).

Soyez donc sûr que votre JFrame contient quelque chose de ce genre, par exemple un KeyListener et une condition disant que quelque chose se passe si vous pressez la touche ENTER. Vous l'avez ? Parfait, nous allons mettre dans ce if tout ce qu'il faut pour retirer le JPanel et le remplacer par un autre.

Posons que nos deux JPanel se nomment panneau1 et panneau2 tout simplement et que notre container se nomme contentPane. Voilà ce qu'il faut donc mettre dans votre condition :
Code:

                    contentPane.remove( panneau1 );
                    panneau2 = new Panneau2();
                    contentPane.add( panneau2 );
                    contentPane.validate();


Je vais déjà vous expliquer ça et faire un lien avec les précédents tutoriels pour faire quelque chose de bien complet Wink
La première ligne, contentPane.remove( panneau1 ); donc, va retirer ( to remove en anglais veux dire enlever donc ça prend tout son sens Very Happy ) le premier JPanel.
La seconde ligne va déterminer ce qu'est panneau2, en l’occurrence notre second JPanel.
La troisième ligne va tout simplement ajouter le second JPanel comme vous l'aviez fait pour votre premier panneau.
Et c'est la quatrième ligne à laquelle on ne pense jamais, ce fameux validate sans lequel toute cette opération ne sert à rien. Et oui parce qu'il faut bien confirmer se changement à l'intérieur même du container principal, il ne faut donc surtout pas oublier cette dernière ligne parce que c'est justement son but.

Vous voyez, ce n'est pas difficile mais il faut trouver et quand on est pas anglophone ou sans un minimum de base pour comprendre la doc de chez sun on y trouve pas si facilement Wink

En bonus, voici une application des derniers tutoriels (permettre l'utilisation d'un clavier dans un panel et mettre un fond coloré à ce même panel) utilisés tout en changeant de panel :

Code:

                    contentPane.remove( panneau1 );
                    panneau2 = new Panneau2();
                    panneau2.setFocusable( true );
                    panneau2.requestFocus();
                    panneau2.setBackground(Color.GREEN);
                    contentPane.add( panneau2 );
                    contentPane.validate();

avatar
Zepalkia
Admin
Admin

Avertissement : aucun avertissement
Messages : 882
Date d'inscription : 23/12/2009
Age : 31

https://sos-internautes.forumactif.com

Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum