【发布时间】:2012-04-12 21:29:14
【问题描述】:
我有一个JFrame,里面有一个JPanel。该面板显示在运行时从网络接收的图像。这些图像通常很大,但可以有任意大小。考虑到这一点,并考虑到我将来可能会在框架中添加一个菜单栏,我想做以下事情:
- 对于每个接收到的图像,面板都会调整到其确切大小。
- 如果图像(以及调整后的面板)的宽度或高度超过某个最大值(例如:屏幕大小 - 100 像素),则框架应调整为允许的最大值并启用滚动条。
- 否则,框架应调整其大小以显示整个面板而没有任何填充。所以框架大小是内容面板大小加上边框和标题栏(如果我最终添加它,还有菜单栏)。
有没有办法做到这一点?如果没有,最好的选择是什么?
提前致谢
编辑:
总而言之,问题是如何调整父框架的大小以适应其子内容面板。这与大多数人的做法相反(调整面板大小以适合框架)。
对于第 3 点,我已经有了内容面板尺寸,因此问题被简化为计算框架框架的大小(顶部标题栏高度、边框宽度)。有了它,我可以将框架的大小调整为内容窗格完全适合其中的大小。
【问题讨论】:
-
听起来很标准,pack() 有什么问题?
-
@kleopatra 不知道原因,但不起作用。启动最小尺寸的框架,然后在收到图像时,我调整面板的大小。那时,如果我调用 pack,框架不会改变它的大小。
-
调整大小不是你的工作,而是 LayoutManager 的工作:让面板根据图像大小决定其 prefSize,让它在接收到新图像时重新验证自己,然后在框架上调用 pack-worksformalways(从我的头顶开始,手边没有 IDE)
-
@kleopatra 里面只有一个带有自定义窗格的框架(我已经覆盖了
paintComponent)。调用pack不起作用。我尝试在其自身和 contentPane 上调用也验证,但没有成功。我也尝试评论frame.setMinimumSize行,但不走运。每次更新后,自定义窗格都称为setSize。 -
您描述的方式是错误的做法 - 阅读我的最后一条评论并在 sscce 中实施。然后我们会看看是否/如何/什么不起作用:-)