Java 1.5中JScrollPane中JPanel的大小不正确

Java 1.5中JScrollPane中JPanel的大小不正确,java,user-interface,jpanel,jscrollpane,Java,User Interface,Jpanel,Jscrollpane,我正在制作一个图像加载组件,它由一个包含JScrollPane的JPanel组成,而JScrollPane又包含另一个JPanel。该组件所做的是允许将图像放置在其顶部,然后加载图像,并将最内部的JPanel设置为所放置图像的大小。这反过来会导致滚动条显示,用户可以滚动图像。这一切都很好。当我尝试将图像自动缩小到外部JPanel中的最大可见区域时,问题就出现了。在本例中,我对图像进行均匀缩放,使其小于或等于外部JPanel的宽度和高度。现在出现的情况是,水平和垂直滚动条都显示,指示内部JPane

我正在制作一个图像加载组件,它由一个包含JScrollPane的JPanel组成,而JScrollPane又包含另一个JPanel。该组件所做的是允许将图像放置在其顶部,然后加载图像,并将最内部的JPanel设置为所放置图像的大小。这反过来会导致滚动条显示,用户可以滚动图像。这一切都很好。当我尝试将图像自动缩小到外部JPanel中的最大可见区域时,问题就出现了。在本例中,我对图像进行均匀缩放,使其小于或等于外部JPanel的宽度和高度。现在出现的情况是,水平和垂直滚动条都显示,指示内部JPanel大于可见区域(不应该是这种情况)。我验证了图像是否按适当的尺寸缩放(即最大宽度和高度)。我还验证了如果将最大高度降低3像素,则不会出现滚动条

我认为问题在于,panel.getWidth()和panel.getHeight()实际上并没有返回子组件可以占据的可见区域(最大区域)。也就是说,JPanel周围的边界或类似的东西可能会占用更多的宽度和高度

我的问题是,我如何回避这个问题。从功能上讲,我只想确定JPanel在JScrollPane中的最大大小,然后将面板设置为该大小并在其上方绘制图像,并确保滚动窗格的滚动条不会显示。现在,滚动条设置为“按需”

下面是代码的一部分:

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

从功能上来说,我只想 确定JPanel的最大大小 可以在JScrollPane中


谢谢,但不幸的是,这给出了JScrollPane中容器的大小。我想要的是滚动窗格查看区域的大小。也就是说,我想要一个宽度和高度,我可以使内部JPanel(在滚动窗格内)适合滚动窗格,而无需使滚动条在设置为需要时显示。我希望这是有意义的。然后使用viewport.getSize()。我认为这两个地方是一样的,但显然不是。或者可能是范围大小。无论如何,你所寻找的答案都包含在viewport方法中。好的,这很有效,非常感谢。我不得不做一个小的添加,因为getSize()似乎受到滚动条可见的影响。代码如下。干杯维度vSize=imageScrollPane.getViewport().getSize();int width=vSize.width;int height=vSize.height;if(vs.isVisible()){width+=vs.getWidth();}if(hs.isVisible()){height+=hs.getHeight();}其中vs和hs是imageScrollPane中的滚动条
scrollPane.getViewport().getViewSize();