【问题标题】:Incorrect sizing of a JPanel in a JScrollPane In Java 1.5Java 1.5 中 JScrollPane 中 JPanel 的大小不正确
【发布时间】:2011-02-14 05:19:26
【问题描述】:

我正在制作一个图像加载组件,它由一个包含 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);

谢谢!

【问题讨论】:

    标签: java user-interface jpanel jscrollpane


    【解决方案1】:

    功能上我想要的只是 确定 JPanel 的最大尺寸 可以在 JScrollPane 中

    scrollPane.getViewport().getViewSize();
    

    【讨论】:

    • 谢谢,但不幸的是,这给了我 JScrollPane 内容器的大小。我想要的是滚动窗格的查看区域的大小。 IE。我想要一个宽度和高度,我可以使内部 JPanel(在滚动窗格内)适合滚动窗格内,而不会在设置为 AS_NEEDED 时出现滚动条。我希望这是有道理的。
    • 然后使用 viewport.getSize()。我认为两者相同,但显然不是。或者它的范围大小。无论如何,您寻求的答案都包含在视口方法中。
    • 好的,非常感谢。我不得不做一个小的补充,因为 getSize() 似乎受到可见滚动条的影响。代码如下。干杯!维度 vSize = imageScrollPane.getViewport().getSize(); int 宽度 = vSize.width; int 高度 = vSize.height; if (vs.isVisible()) { width += vs.getWidth(); } if (hs.isVisible()) { 高度 += hs.getHeight();其中 vs 和 hs 是 imageScrollPane 中的滚动条
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 2014-05-17
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    相关资源
    最近更新 更多