我需要为Skype中的联系人列表实现ui。由JPanel派生的自定义类(JContact)表示的联系人。我试图使用不同的布局但没有收到预期的结果。主框架具有下一个结构。
JFrame - >的JPanel(contactsPanel) - > JScrollPane的(scrollContacts) - >的JPanel(contactPanel)
scrollContacts.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); scrollContacts.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
如果对contactPanel使用FlowLayout(请参阅图像中的FlowLayout)
我认为存在奇怪的行为,因为预期每个联系人会在一个人之下,因为滚动联系表示HORIZONTAL_SCROLLBAR_NEVER。
如果使用网格或框布局。布局会自动调整我的面板尺寸,看起来非常难看。请参阅网格和盒子布局图像。
预期结果见“预期”图像
我不是母语人士,所以请抱歉我的英语不好。谢谢你的关注!
答案 0 :(得分:1)
FlowLayout类将组件放在一行中,其大小按其首选大小排列。如果容器中的水平空间太小而无法将所有组件放在一行中,则FlowLayout类使用多行
所以你得到的结果是预期的。
GridLayout对象将组件放置在单元格网格中。每个组件占用其单元中的所有可用空间,并且每个单元的大小完全相同。如果调整GridLayoutDemo窗口的大小,GridLayout对象会更改单元格大小,以便在给定容器可用空间的情况下,单元格尽可能大。
所以你得到的结果也是预期的。
当BoxLayout从上到下布置组件时,它会尝试在组件的首选高度处调整每个组件的大小。如果布局的垂直空间与首选高度的总和不匹配,则BoxLayout会尝试调整组件的大小以填充空间。
所以你得到的结果也是预期的。
但是,盒子布局可以包含胶水组件以避免这种情况。
因此我会使用垂直框布局,并添加垂直胶水作为最后一个组件。阅读the tutorial。