Changement contentpane de la fenêtre après le bouton cliqué
Je veux être en mesure de définir une JFrame du contentpane après un bouton à l'intérieur de l'une de celle de l'image, JPanels a été cliqué.
Mon architecture se compose d'un contrôleur qui crée la JFrame et le premier Composite à l'intérieur. À partir de l'intérieur de la première Composite je suis l'appel d'une méthode: setcontentpane(Composite composite) sur le contrôleur. Cependant, au lieu de charger le passé un Composite, il ne fait rien mais le fait d'enlever tous les Panneaux (voir code ci-dessous)
ActionListener à l'intérieur de la première Composite:
public void actionPerformed(ActionEvent arg0) {
controller.setpanel(new CustomPanel(string1, string2));
}
Contrôleur:
JFrame frame;
public void setpanel(JPanel panel)
{
frame.getContentPane().removeAll();
frame.getContentPane().add(panel);
frame.repaint();
}
public Controller(JFrame frame)
{
this.frame=frame;
}
Quelqu'un peut me dire ce que je fais mal? Merci 🙂
OriginalL'auteur Julian | 2011-05-15
Vous devez vous connecter pour publier un commentaire.
Appel revalidate, puis repeindre. Cela indique à la disposition des gestionnaires pour faire leurs mises en page de leurs composants:
Mieux mais si vous voulez juste pour échanger JPanels est d'utiliser un CardLayout et de l'avoir faire le sale travail.
que voulez-vous dire que vous ne comprenez pas pourquoi votre code ne fonctionne pas? Vous n'avez pas invoquer la revalidate() la méthode. Si vous voulez dire que vous ne comprenez pas pourquoi revalidate() est nécessaire ensuite de penser à ce qui se passe si vous ajoutez 100 composants sur le panneau? Il ne fait pas de sens à disposition les composants après chaque ajout(...) ou de supprimer (...). Ainsi, au lieu de vous dire le layout manager lorsque vous avez terminé d'apporter des modifications à l'aide de la revalidate() la méthode. Ensuite, la mise en page est effectuée qu'une seule fois.
OriginalL'auteur Hovercraft Full Of Eels
J'ai trouvé un moyen de faire ce que j'ai décrites ci-dessus.
La mise en œuvre de la setpanel méthode comme ceci:
a fait le tour de mon cas.
Je suis assez sûr que j'ai encore besoin de réparer quelque chose dans mon code (concernant les gestionnaires de disposition et préféré tailles, car pack() encore réduit la taille de la fenêtre), mais au moins la méthode expliquée ci-dessus fonctionne comme il est 🙂
OriginalL'auteur Julian
Chaque fois que vous modifiez une image de confinement de la hiérarchie, vous devez appeler
pack()
.De la documentation:
Non, le Composite est probablement dans la JFrame. Il est plus probable que votre preferredSizes n'ont pas été définis ou vous n'êtes pas en utilisant les gestionnaires de mise en page correctement.
Où serait normalement utiliser la mise en page des gestionnaires de façon incorrecte? Je n'ai pas accordé beaucoup d'attention jusqu'à maintenant.
c'est le problème, alors, concentrez-vous sur eux et de les utiliser. Les tutoriels sur la façon de les utiliser est assez décent.
OriginalL'auteur Anon