2010-11-07 6 views
0

J'utilise NetBeans pour développer un simple navigateur d'images. J'ai la classe ImageBrowser qui s'étend JFrame (créé en cliquant droit sur le projet NetBeans puis Nouveau -> Formulaire JFrame) et à l'intérieur est un JPanel et un JToolbar avec JButtons générés sous forme de vignettes d'image à partir d'un répertoire que l'utilisateur sélectionne.Redimensionner JFrame selon le contenu de l'image JPanel?

Cliquer sur une vignette d'image affiche l'image dans son ensemble sur cette JPanel principale. Fondamentalement, les images sont de tailles différentes et je veux que le JFrame (c'est-à-dire la fenêtre entière) s'adapte automatiquement à la taille de l'image.

J'ai essayé d'appeler .pack() pour les principaux changements `JFrame » chaque fois que le contenu JPanel (lorsque l'utilisateur clique sur une vignette et déclenche un ActionEvent.), Mais il me donne cette erreur:

non-static method pack() cannot be referenced from static content

Donc, je suis plutôt bloqué à ce sujet et je me demande s'il y a un moyen de le faire. Si oui, est-il également possible de définir une limite maximale pour la taille de la fenêtre JFrame? En ce qui concerne la mise en forme, la mise en page JFrame est une mise en page gratuite, construite à l'aide du développeur de l'interface graphique NetBeans.

+0

Peut-être vaudra-t-il mieux ne pas redimensionner la fenêtre, mais plutôt redimensionner l'image elle-même? – Rogach

+0

Oui, j'ai décidé de le faire après avoir réalisé que les vrais navigateurs d'images réduisaient l'image au lieu de la fenêtre. Assez évident mais ça m'a tout simplement échappé. Merci quand même – Flynn

Répondre

0

non-static method pack() cannot be referenced from static content

N'utilisez pas de méthodes statiques dans votre application. Il n'y a pas besoin de faire ça. La seule méthode statique doit être la méthode main() et la méthode "createAndShowGUI" en supposant que vous suiviez l'exemple de code trouvé dans le Swing tutorial examples.

Vous pouvez trouver la fenêtre d'emballer() en utilisant

SwingUtilities.windowForComponent(...); 

Vous obtenez la source de la ActionEvent puis utiliser ce composant pour trouver la fenêtre pour emballer.

is it also possible to set a maximum limit on the JFrame window size?

Exécutez le pack(). Ensuite, vous pouvez toujours dépasser la taille maximale en appelant setSize() sur la fenêtre si les dimensions dépassent votre limite. Je suis également d'accord, ce n'est pas un bon design de changer continuellement la taille de la fenêtre chaque fois que l'image est changée.

Je voudrais ajouter l'image à un JLabel et ajouter l'étiquette à un scrollpane à cette barre de défilement peut apparaître lorsque l'image est supérieure à la taille de l'image.

+0

Merci beaucoup camickr. J'ai décidé de réduire les images et j'ai réglé le cadre de la fenêtre à une taille fixe. – Flynn

Questions connexes