2010-04-30 4 views
0

Je crée un composant de chargement d'image qui consiste en un JPanel contenant un JScrollPane, qui à son tour contient un autre JPanel. Ce que fait ce composant est de laisser tomber les images dessus, après quoi l'image est chargée et le JPanel le plus interne est défini à la taille de l'image abandonnée. Cela provoque à son tour l'affichage des barres de défilement et l'utilisateur peut faire défiler l'image. Tout cela fonctionne très bien. Le problème vient quand j'essaie de rétrécir automatiquement l'image à la zone visible maximale dans le JPanel externe. Dans ce cas, je fais une échelle uniforme de l'image pour être inférieure ou égale à la largeur et la hauteur du JPanel externe. Ce qui se passe maintenant, c'est que les barres de défilement horizontales et verticales s'affichent indiquant que le JPanel interne est plus grand que la zone visible (ce qui ne devrait pas être le cas). J'ai vérifié que l'image est échelle aux bonnes dimensions (c'est-à-dire que la largeur et la hauteur maximales sont respectées). J'ai également vérifié que si je réduis la hauteur maximale de 3 pixels, aucune barre de défilement n'apparaît. Ce qui me semble le problème, c'est que panel.getWidth() et panel.getHeight() ne renvoient pas réellement la zone visible (zone maximale) que les sous-composants peuvent utiliser. C'est à dire. il y a probablement plus de largeur et de hauteur prises par la frontière autour du JPanel ou quelque chose comme ça.Dimensionnement incorrect d'un JPanel dans un JScrollPane dans Java 1.5

Ma question est, comment puis-je contourner ce problème. Fonctionnellement tout ce que je veux est de déterminer la taille maximum qu'un JPanel peut être dans un JScrollPane, puis placer le panneau à cette taille et peindre une image dessus et être assuré que les barres de défilement du volet de défilement n'apparaîtront pas. À l'heure actuelle, les barres de défilement sont définies sur AS_NEEDED.

est ici une partie du code:

JPanel. Insets insets = getInsets(); 
int width = getWidth() - insets.left - insets.right; 
int height = getHeight() - insets.top - insets.bottom; 
imageScaled = ImageUtils.uniformScaleImage(imageOriginal, width, height); 

Merci!

Répondre

1

Fonctionnellement tout ce que je veux, c'est déterminer la taille maximale d'un JPanel peut être dans un JScrollPane

scrollPane.getViewport().getViewSize(); 
+0

Merci, mais malheureusement, cela me donne la taille du récipient à l'intérieur du JScrollPane. Ce que je veux, c'est la taille de la zone d'affichage du volet de défilement. C'est à dire. Je veux une largeur et une hauteur que je peux faire le JPanel interne (à l'intérieur du volet de défilement) qui s'adaptera à l'intérieur du volet de défilement sans faire apparaître les barres de défilement lorsqu'il est défini sur AS_NEEDED. J'espère que cela à du sens. – Coder

+0

Ensuite, utilisez viewport.getSize(). Je pensais que les deux étaient les mêmes, mais apparemment pas. Ou peut-être sa taille d'extension. En tout cas, la réponse que vous recherchez est contenue dans les méthodes de viewport. – camickr

+0

merci, je vais essayer ceux – Coder