Java Swing: dispose() une JFrame n'efface pas ses contrôles
J'ai un closeWindow() méthode qui utilise dispose() de la JFrame fermer. Quand je montre à nouveau la fenêtre, les contrôles (zones de texte, des listes, des tableaux, etc.) ont encore leurs valeurs précédentes en place qui étaient là quand je dispose():d le cadre... Pourquoi est-ce? Est-il une autre façon de completley fermer et effacer une image?
C'est ce code qu'une autre JFrame utilise pour montrer à l'autre fenêtre, je fais quelque chose de mal ici?
@Action
public void showAddProductToOrderView() {
if (addProductToOrderView == null) addProductToOrderView = new AddProductToOrderView(this);
addProductToOrderView.setVisible(true);
}
il suffit de créer une nouvelle instance.
Si vous voyez le code que j'ai ajouté ci-dessus, n'est-ce pas addProductToOrderView null après avoir été dispose():d? Comment puis-je m'assurer que la variable est désactivée?
Si vous voyez le code que j'ai ajouté ci-dessus, n'est-ce pas addProductToOrderView null après avoir été dispose():d? Comment puis-je m'assurer que la variable est désactivée?
OriginalL'auteur Johan | 2010-01-10
Vous devez vous connecter pour publier un commentaire.
Disposer d'une fenêtre ne sera pas effacer son enfant composants de texte. Disposer va libérer les ressources autochtones. La javadoc de java.awt.Fenêtre déclare également:
Comme suggéré par d'autres, de créer une nouvelle instance à chaque fois à la place. Si c'est cher je crois que votre meilleur option pour effacer les sous-composants lorsque la vue devient visible, par exemple en substituant
setVisible
.EDIT:
Supprimer le nul de la case pour créer une nouvelle image à chaque fois.
Je ne sais pas pour le reste de votre code, si il y a quelque chose d'autre en fonction de l'image réutilisée. Par exemple, si vous avez joint des auditeurs, de s'assurer qu'ils ne sont pas enregistrées à pas de fuite.
La variable ne sera pas mis à null sauf si vous le faites vous-même quelque part dans votre code. De disposer du cadre ne la libération de ses ressources autochtones (le WindowPeer etc), cela n'affectera pas les références tenu de l'objet. Supprimer le nul de la case pour créer une nouvelle instance à chaque fois.
Il fonctionne! Merci beaucoup!
OriginalL'auteur Samuel Sjöberg
La chose la plus simple à faire serait de re-créer l'ensemble de l'image (à l'aide de son constructeur) avant d'utiliser
show()
de l'afficher de nouveau. Qui va vous donner un tout nouveau jeu de composants, en supposant que le constructeur crée et des les lieux les.OriginalL'auteur Carl Smotricz