0

我需要为Skype中的联系人列表实现ui。由 JPanel 派生的自定义类(JContact)表示的联系人。我尝试使用不同的布局,但没有收到预期的结果。主机架有下一个结构。

JFrame -> JPanel(contactsPanel)-> JScrollPane(scrollContacts)->JPanel(contactPanel)

scrollContacts.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_​​ALWAYS); scrollContacts.setHorizo​​ntalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_​​NEVER);

如果对 contactPanel 使用 FlowLayout(请参见图片中的 FlowLayout)

我认为奇怪的行为,因为预期每个联系人将在一以下,因为指示滚动联系人的 HORIZONTAL_SCROLLBAR_​​NEVER。

如果使用 Grid 或 Box 布局。布局会自动重新调整我的面板大小,看起来很丑。请参阅 Grid&Box 布局图像。

预期结果见“预期”图像

----看图----

我不是母语人士,所以请原谅我的英语不好。谢谢您的关注!

4

1 回答 1

1

引用Swing 教程

FlowLayout 类将组件排成一排,按其首选大小调整大小。如果容器中的水平空间太小,无法将所有组件放在一行中,FlowLayout 类使用多行

所以你得到的结果是预期的。

GridLayout 对象将组件放置在单元格网格中。每个组件占用其单元格内的所有可用空间,并且每个单元格的大小完全相同。如果调整 GridLayoutDemo 窗口的大小,则 GridLayout 对象会更改单元格大小,以便在给定容器可用空间的情况下使单元格尽可能大。

所以你得到的结果也是意料之中的。

当 BoxLayout 从上到下布局组件时,它会尝试将每个组件的大小调整为组件的首选高度。如果布局的垂直空间与首选高度的总和不匹配,则 BoxLayout 会尝试调整组件的大小以填充空间。

所以你得到的结果也是意料之中的。

但是,盒子布局可以包含胶水组件来避免这种情况。

因此,我将使用垂直框布局,并添加垂直胶水作为最后一个组件。阅读教程

于 2012-12-08T12:18:36.647 回答