我在 GridBagLayout 中嵌入了一个 JScrollPane。大多数时候 JScrollPane 的内容小于可用空间。在这种情况下,我希望 JScrollPane 与它需要的大小完全相同。
例如,如果我有 10 行文本,总高度为 100 像素,则 JScrollPane 应该是 100 像素,没有任何滚动条。(这不一定是动态的,如果我可以设置最大尺寸就足够了,内容不会改变。)
仅当我调整 JFrame 的大小并且可用空间变得小于 JScrollPane 的内容时,我希望 JScrollPane 缩小并显示滚动条。
我尝试使用 GridBagConstraints.fill 参数。这适用于将大小调整为任何大小,但它也总是填充整个空间(我认为,如果使用填充参数应该做什么)。
如果我只是通过 setPreferedSize() 设置 JScrollPane 的大小而没有填充参数,并且 Frame 变得小于此 preferedSize,则 scrollPane 立即缩小到一个小块(正如我所读到的,我无论如何都不应该使用 setPreferedSize 方法(?)) .
我还尝试了具有首选和最小尺寸的 BoxLayout,但是如果可用空间变得小于首选尺寸,则 JScollPane 会立即使用它的最小尺寸。
总结一下:我需要一个 JScrollPane,它根据可用空间调整大小,但最多只能达到最大大小。
我必须使用哪些布局和设置才能获得所需的结果?
几个小时以来我一直在努力解决这个问题:(
编辑:
这里有几张截图:
Radio 1 和 Radio 2 下方左侧的 JScrollPane。
正常大小的框架,JScrollPane 只使用它需要的空间:
如果我把它变大,JScrollPane 不会改变(工作):
但是,如果我使 Frame 小于 JScrollpane,组件就会变得混乱:
我希望它看起来像什么: