Java JScrollPane和大小调整问题

Java JScrollPane和大小调整问题,java,swing,layout,user-interface,jpanel,Java,Swing,Layout,User Interface,Jpanel,我有一个相当大的问题,关于一个正确的方式来处理“包装”一个JPanel和允许一个滚动条 我遗漏了一点代码,但我相信所提供的应该足够了 问题是JScrollBar要么不显示,要么无法与之交互(如果我将滚动条设置为始终具有垂直条) 以下是一幅描述这一点的图像: !![不存在滚动条][1] ProjectPanel(extends JPanel)的大小是固定的,正如您所看到的,它比可视视图端口延伸得更远。无法获取JPanel(ProjectSelector)的计算高度,因为ProjectPanel也可

我有一个相当大的问题,关于一个正确的方式来处理“包装”一个JPanel和允许一个滚动条

我遗漏了一点代码,但我相信所提供的应该足够了

问题是JScrollBar要么不显示,要么无法与之交互(如果我将滚动条设置为始终具有垂直条)

以下是一幅描述这一点的图像:

!![不存在滚动条][1]

ProjectPanel(extends JPanel)的大小是固定的,正如您所看到的,它比可视视图端口延伸得更远。无法获取JPanel(ProjectSelector)的计算高度,因为ProjectPanel也可以转换为:

!![它们需要作为网格填充][2]

如果有人能提供一些关于如何做到这一点的见解,那就太好了。到目前为止,我希望不惜一切代价不要使用外部API,因为这样做弊大于利

问题:

如何将首选尺寸的高度设置为“灵活”,以便在添加组件时可以扩展?如果这不理想/不可能,我如何才能正确地允许JScrollPane高效地显示JPanel的所有组件

如果没有,则流布局将它们水平组织

也许你应该使用网格布局


如果没有,那么您可以尝试,这是一种根据需要换行的FlowLayout。

如果您正在寻找不同的布局,为什么不尝试呢?它是一个非常强大和灵活的布局管理器

请参阅详细示例

从该链接,重写
initUI
方法以查看您的问题感兴趣的行为:

public void initUI() {
    this.setPreferredSize(new Dimension(100, 100));
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setJMenuBar(initMenuBar());
    this.getContentPane().add(new JScrollPane(mainPanel = initMainPanel()));
    this.setLocationByPlatform(true);
    this.pack();        
}

不要设置首选大小选择器。滚动窗格将此用作确定何时显示其滚动的一部分bars@MadProgrammer,如果我没有,则流布局将水平组织它们。我可以提供一个样本图像给你看,但它不会工作。我不想要任何水平滚动。让LayoutManager确定面板的preferredSize。如果我没有指定面板的宽度:@Legend我正要解决这个问题,请看一看,它解决了这个问题GridLayout的问题,我原来的问题是它没有保持内部面板的大小。它还定义了列,这是行不通的。是的,我在发布并看到你的两张图片后才意识到这一点。我可能会自己制作,但看看包装布局是如何工作的会有所帮助。谢谢你的回答和时间。很抱歉给您带来这么大的不便。这个程序是针对一个公文包的,所以我使用的外部API越少,我的工作就越可信。