联系人名单

时间:2012-12-08 11:56:23

标签: java swing jscrollpane

我需要为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。

如果使用网格或框布局。布局会自动调整我的面板尺寸,看起来非常难看。请参阅网格和盒子布局图像。

预期结果见“预期”图像

----SEE IMAGE----

我不是母语人士,所以请抱歉我的英语不好。谢谢你的关注!

1 个答案:

答案 0 :(得分:1)

引用Swing tutorial

  

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

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

  

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

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

  

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

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

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

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