2010-04-30 75 views
0

我提出的图像加载组件,其由含有一个JScrollPane,其又包含另一个的JPanel一个JPanel的。该组件所做的是允许将图像放在其上,然后载入图像,并将最内层的JPanel设置为丢弃图像的大小。这反过来导致滚动条出现,用户可以滚动图像。这一切工作正常。当我尝试将图像自动缩小到外部JPanel中的最大可见区域时,问题就出现了。在这种情况下,我会将图像的均匀比例设置为小于或等于外部JPanel的宽度和高度。现在发生的事情是,水平和垂直滚动条都显示出来,表明内部JPanel比可见区域大(这不应该是这种情况)。我验证了图像是按比例缩放的(即最大宽度和高度得到了尊重)。我还证实,如果我将最大高度减少3个像素,则不会出现滚动条。在JScrollPane一个JPanel的不正确的大小在Java 1.5

什么,我相信这个问题是,是,panel.getWidth()和panel.getHeight()并不会实际返回的可视区域(最大面积),该子组件可以占用。 IE浏览器。 JPanel周围的边界可能会占用更多的宽度和高度,或者类似的东西。

我的问题是,我该如何解决这个问题搞定。功能我要的是确定一个JPanel可以在JScrollPane中的最大尺寸,然后设置面板到规模和在它上面绘制图片和放心,滚动窗格的滚动条将不会出现。现在滚动条被设置为AS_NEEDED。

下面的代码的一部分:

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

谢谢!

回答

1

功能所有我想要的是 确定一个JPanel 可以在JScrollPane

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

谢谢,但不幸的是,这给了我JScrollPane的内部容器的尺寸最大尺寸。我想要的是滚动窗格的查看区域的大小。 IE浏览器。我想要一个宽度和高度,可以使内部JPanel(在滚动窗格内)适合滚动窗格内,而不会在设置为AS_NEEDED时出现滚动条。我希望这是有道理的。 – Coder 2010-04-30 15:50:36

+0

然后使用viewport.getSize()。我认为这两个地方相同,但显然不是。或者也许它的范围大小。无论如何,你所寻求的答案都包含在视口方法中。 – camickr 2010-04-30 16:11:30

+0

谢谢,我会尝试那些 – Coder 2010-04-30 16:55:30