Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使JPanel调整大小以适合其组件?_Java_Swing_Resize_Jpanel_Jscrollpane - Fatal编程技术网

Java 如何使JPanel调整大小以适合其组件?

Java 如何使JPanel调整大小以适合其组件?,java,swing,resize,jpanel,jscrollpane,Java,Swing,Resize,Jpanel,Jscrollpane,我有一个JScrollPane,它的视口是JPanel。JPanel包含占用整个视口宽度的较小JPanel,而大JPanel设置为FlowLayout。用户应该能够添加任意数量的JPanel(我的目的是最多添加200个),并且应该能够向下滚动JScrollPane以查看添加的所有内容。基本上我只是想让JScrollPane成长。我在计算我认为JPanel的高度应该是这样的: Dimension dimension = new Dimension(width, smallPanel.height

我有一个JScrollPane,它的视口是JPanel。JPanel包含占用整个视口宽度的较小JPanel,而大JPanel设置为FlowLayout。用户应该能够添加任意数量的JPanel(我的目的是最多添加200个),并且应该能够向下滚动JScrollPane以查看添加的所有内容。基本上我只是想让JScrollPane成长。我在计算我认为JPanel的高度应该是这样的:

Dimension dimension = new Dimension(width, smallPanel.height * totalPanels
+ ((FlowLayout) getLayout()).getVGap * totalPanels);

setPreferredSize(dimension);
它基本上是可以工作的,但是当你添加更多的时候,它开始将较小的JPanel切掉,而底部面板最终没有显示出来。有没有一种方法可以确定视口JPanel的大小,这样我就不必用变量计算其尺寸?就像pack()对JFrame的作用一样?还是我需要继续猜测和检查


首先感谢

,不要使用
setPreferredSize(维度),让面板的布局管理器完成它的工作,并计算它需要的首选/最小/最大尺寸,以便容纳子组件
FlowLayout
可能不是这里的最佳选择,您可以使用SwingLab的SwingX库中的
GridBagLayout
VerticalLayout
,或者Rob不使用FlowLayout,而是使用另一个布局或嵌套的JPanel,每个布局都有自己的布局。我无法给出更具体的建议,因为我不完全理解您想要实现的目标。另外,希望您的意思是视口的视图是JPanel,而不是视口本身。有关查看和使用多个子JPanel的信息,我将尝试这些布局。谢谢各位