47 votes

Comment changer JPanel à l'intérieur d'un JFrame à la volée?

Pour le dire simplement, il existe une application Java Swing simple composée de JFrame et de certains composants. L'un des composants est un JPanel qui doit être remplacé par un autre JPanel en cas d'action de l'utilisateur.

Alors, quelle est la bonne façon de faire une telle chose? J'ai essayé

 panel = new CustomJPanelWithComponentsOnIt();
parentFrameJPanelBelongsTo.pack();
 

mais ça ne marchera pas. Que suggérerais-tu?

53voto

Swapnonil Mukherjee Points 1485

Votre cas d'utilisation semble parfait pour CardLayout .

Dans la disposition des cartes, vous pouvez ajouter plusieurs panneaux au même endroit, mais ensuite les afficher ou les masquer, un panneau à la fois.

29voto

Telcontar Points 2329

1) Configuration du premier panneau:

 JFrame frame=new JFrame();
frame.getContentPane().add(new JPanel());
 

2) Remplacement du panneau:

 frame.getContentPane().removeAll();
frame.getContentPane().add(new JPanel());
 

Notez également que vous devez le faire dans le fil de l’événement, pour vous en assurer, utilisez SwingUtilities.invokeLater ou SwingWorker.

23voto

 frame.setContentPane(newContents());
frame.revalidate(); // frame.pack() if you want to resize.
 

Rappelez-vous, Java utilise l'argument 'référence de copie par valeur'. Ainsi, changer une variable ne changera pas les copies de la référence passée à d'autres méthodes.

Notez également que JFrame est très déroutant au nom de la facilité d'utilisation. L'ajout d'un composant ou la configuration d'une présentation (généralement) effectue l'opération dans le volet de contenu. Curieusement, obtenir la disposition vous donne vraiment le gestionnaire de disposition du cadre.

5voto

ShawnD Points 519

Sur l'action de l'utilisateur:

// vous devez faire quelque chose dans le sens de

 myJFrame.getContentPane().removeAll()
myJFrame.getContentPane().invalidate()

myJFrame.getContentPane().add(newContentPanel)
myJFrame.getContentPane().revalidate()
 

Ensuite, vous pouvez redimensionner votre fenêtre si nécessaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X