4 Réponses :
Roman, le problème peut être résolu comme celui-là: p>
Exécuter Code> Méthode: Li>
ol>
final jPanel PartnersPanel = GeneratePartnerselectionPanel (); Code> P>
- alors faites ceci li>
ol>
cadre.getContentPane (). Ajouter (PartnerselectionPanel); Code> P>
- Avant d'ajouter le nouveau panneau, faites ceci: li>
ol>
partenaireselectionPanel.setVisible (Faux); code> p>
Ça marche. Je ne sais pas s'il s'agit d'une solution sûre et / ou élégante, mais cela fonctionne. P>
Je pense que l'utilisation de SetVisible est une meilleure solution puis en ajoutant et en retirant le panneau.
Le moyen le plus simple de supprimer un composant (panneau) à partir d'un conteneur (cadre) consiste à contenir une référence à celui-ci, puis appelez conteneur.remove (composant) code> IE:
private Thread controller = new Thread() {
public void run() {
final Component panel1 = generatePartnerSelectionPanel();
// First we set the initial pane (for the selection of partner).
SwingUtilities.invokeLater(new Runnable() {
public void run() {
frame.getContentPane().add(panel1);
frame.invalidate();
frame.validate();
}
});
// Update the pane for the selection of the parnter.
for (int i=40; i>0; i=i-1) {
final int sec = i;
SwingUtilities.invokeLater(new Runnable() {
public void run() {
timeLeftLabel.setText(sec + " seconds left.");
}
});
try {Thread.sleep(1000);} catch (InterruptedException e) {}
if (partnerSubmitted) {break;}
}
// For the given user the selection phase is finished (either the time is over or form was submitted).
SwingUtilities.invokeLater(new Runnable() {
public void run() {
frame.getContentPane().remove(panel1);
frame.getContentPane().add(generateWaitForGamePanel());
frame.invalidate();
frame.validate();
}
});
}
};
Merci! Je l'ai testé et ça marche! Il semble être meilleur que la solution de minière. Il vaut mieux l'enlever plutôt que de se cacher.
Il existe également removeall () code> méthode si vous n'avez pas enregistré le lien vers le (s) composant (s).
heureux d'aider Roman. Vous pouvez cliquer sur la case à côté de la réponse si elle résout votre problème. Et oui, RemoveAll fonctionnera bien, à condition que vous n'ayez pas d'autres composants dans le conteneur.
Merci mec que la réponse a fait ma journée! BTW Vous pouvez également utiliser this.revalidate (); code> au lieu de
cadre.invalidate (); cadre.validate (); code>
C'est la même chose que vous ajoutez ou supprimez un composant sur une interface graphique visible:
revalidate () code> était ce dont j'avais besoin. Merci.
J'ai eu des problèmes avec Ceci a fonctionné pour moi: p> Si vous souhaitez redimensionner, vous avez besoin de demandefocusinwindow code> sur
textfield code> aussi. L'astuce consiste à ne pas construire les composants dans le constructeur
jPanel code>. Mais, faire une méthode de construction et exécuter le code suivant après avoir été ajouté au cadre.
préférés (); code> sur panneau ou utilisez
repeindre () code> si vous n'avez pas besoin de redimensionner le cadre. P> P>
Cela semble être un duplicata de votre propre question: Stackoverflow.com/Questtions/2487658/...