带有JPanel和BoxLayout的java JScrollPane调整元素大小

带有JPanel和BoxLayout的java JScrollPane调整元素大小,java,swing,layout,jscrollpane,null-layout-manager,Java,Swing,Layout,Jscrollpane,Null Layout Manager,我有一个不同元素的JPanel集合:JPanel showPane、seasonsPane、EpicodesPane、AiringPane 所有这些都将setLayout设置为null,并且大小固定为304x416。我将这些JPanel添加到一个名为showViewPanel、大小为1280x416的JPanel中,并设置了一个类似这样的BoxLayout(以下是JFrame中的代码): 我不明白的是,为什么它不生成所有组件的可滚动视图,而是调整showViewPanel的大小以匹配窗口的大小。

我有一个不同元素的JPanel集合:JPanel showPane、seasonsPane、EpicodesPane、AiringPane
所有这些都将setLayout设置为null,并且大小固定为304x416。我将这些JPanel添加到一个名为showViewPanel、大小为1280x416的JPanel中,并设置了一个类似这样的BoxLayout(以下是JFrame中的代码):


我不明白的是,为什么它不生成所有组件的可滚动视图,而是调整showViewPanel的大小以匹配窗口的大小。我做错了什么?

将子面板的
首选大小
改为304x416。滚动窗格依赖于内容的首选大小(这取决于其内容的首选大小)


布局管理器将根据子面板的首选大小设置子面板的大小,以便覆盖自定义子面板。通常,您应该摆脱
null
布局,并学习使用布局管理器。绝对位置总是会带来麻烦,即使不这样也不值得麻烦。

将子面板的
首选大小改为304x416。滚动窗格依赖于内容的首选大小(这取决于其内容的首选大小)

布局管理器将根据子面板的首选大小设置子面板的大小,以便覆盖自定义子面板。通常,您应该摆脱
null
布局,并学习使用布局管理器。绝对位置总是会带来麻烦,即使不值得,也不值得这么麻烦

所有这些都将setLayout设置为null,并且大小固定为304x416

不要使用空布局!!!不要手动设置面板的大小!!!面板应使用布局管理器,以便自动计算首选尺寸

如果您希望所有面板的大小相同,那么可以对主面板(而不是BoxLayout)使用
GridLayout
,然后将子面板添加到此面板

如果您让布局管理器执行其工作,滚动条将在需要时自动显示

所有这些都将setLayout设置为null,并且大小固定为304x416

不要使用空布局!!!不要手动设置面板的大小!!!面板应使用布局管理器,以便自动计算首选尺寸

如果您希望所有面板的大小相同,那么可以对主面板(而不是BoxLayout)使用
GridLayout
,然后将子面板添加到此面板

如果您让布局管理器执行其工作,滚动条将在需要时自动显示

showViewPanel.setLayout(new BoxLayout(showViewPanel, BoxLayout.X_AXIS));
showViewPanel.setSize(1280, 416);
showViewScroll = new JScrollPane(showViewPanel);
add(showViewScroll);
setSize(304, 416);
setVisible(true);