2009-11-13 9 views
20

J'ai créé un JPanel personnalisé qui affiche des images (appelons-le MyPanel), j'ai ajouté ceci au contentPane de JFrame.Comment redimensionner automatiquement JFrame selon le contenu

Je souhaite que JFrame soit redimensionné automatiquement pour correspondre au MyPanel lorsque l'image change. Il semble que j'ai besoin d'appeler frame.pack() pour cela. Appeler pack() de MyPanel augmente le couplage, donc je ne veux pas faire ça.

Pour résoudre le problème que j'étendu JFrame (permet de l'appeler MyFrame) et fait observateur MyFrame et MyPanel observable. Chaque fois que l'image MyPanel affiche des modifications, il notifie les écouteurs, MyFrame pour cette instance. Et puis MyFrame appelle pack() lorsqu'il reçoit la notification.

Existe-t-il un moyen plus simple de redimensionner JFrame selon son contenu?

Répondre

10

La solution que vous avez décrite semble raisonnable.

Alternativement, à chaque fois que MyPanel change son image, il peut aller chercher son Frame parent et y appeler pack(). Si un tel cadre n'existe pas, ne faites rien. Pas besoin de créer des classes supplémentaires, et c'est aussi un couplage lâche que vous allez obtenir. Vous pouvez utiliser SwingUtilities.getAncestorOfClass() pour le faire facilement.

+1

Oui, mon approche était raisonnable. Merci pour votre approbation :) – nimcap

Questions connexes