我正在制作一个图像加载组件,它由一个包含 JScrollPane 的 JPanel 组成,而 JScrollPane 又包含另一个 JPanel。该组件的作用是允许将图像拖放到其顶部,然后加载图像并将最里面的 JPanel 设置为拖放图像的大小。这反过来会导致滚动条出现并且用户可以滚动图像。这一切都很好。当我尝试将图像自动缩小到外部 JPanel 中的最大可见区域时,问题就出现了。在这种情况下,我将图像的统一比例设置为小于或等于外部 JPanel 的宽度和高度。现在发生的情况是水平和垂直滚动条都显示,表明内部 JPanel 大于可见区域(不应该是这种情况)。我验证了图像是否缩放到适当的尺寸(即尊重最大宽度和高度)。我还验证了如果我将最大高度降低 3 个像素,则不会出现滚动条。
我认为问题是 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);
谢谢!