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

时间:2013-10-22 18:41:31

标签: java swing layout jscrollpane null-layout-manager

我有一系列不同元素的JPanel:JPanel showPane,seasonsPane,episodesPane,airingsPane
所有这些都将setLayout设置为null并且具有固定大小304x416。我将这些JPanel添加到一个名为showViewPanel且尺寸为1280x416的JPanel中并设置了一个类似于BoxLayout(下面是JFrame中的代码):

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

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

2 个答案:

答案 0 :(得分:3)

  

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

不要使用空布局!不要手动设置面板的大小!您的面板应使用布局管理器,因此将自动计算首选大小。

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

如果让布局管理员完成工作,Scrollbars会在需要时自动显示。

答案 1 :(得分:1)

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

布局管理器会根据首选大小设置子面板的大小,因此您的自定义面板会被覆盖。通常,您应该摆脱null布局并学习使用布局管理器。绝对放置会一直带来麻烦,即使没有,也不值得麻烦。