2011-06-04 51 views
13

我有使用流布局的面板。摆动流布局中断元素

我该如何在流布局中打破?像在html中的<br/>一样。一些特殊的中断元素或另一个技巧来指示指定的元素和所有后续必须转到下一行。

回答

13

另一个布局在这样的情况下,我把两个容器具有FlowLayout一个之上彼此在BoxLayout内。嵌套布局相当便宜。

+0

嘿,嵌套是好的,但不够,当容器的高度很大时,它会产生不必要的间隙。 – 2011-06-04 17:44:07

+3

如果您正确编码,没有理由存在差距。 – 2011-06-04 17:58:08

+0

发布样本,如果你在它。 – Buffalo 2013-06-25 11:12:38

0

我想让多个占位符面板不带插入,然后使用一些代码来确定何时需要将组件移动到下一个面板,因为它低于最小宽度阈值。这很丑,但它应该工作。您需要手动完成所有的移除和添加工作,并在EDT内完成。

10

Wrap Layout可能是您的解决方案。当一条线已满时它会自动将组件移动到下一行。

+0

非常感谢。你已经救了我的一天。 – 2018-01-09 13:36:33

8

您想手动将组件分成多行吗?所以你知道你想要换行的地方。

在这种情况下我会使用3个面板:

  • 1含有其它2个面板用GridLayout的1列
  • 2板的GridLayout的内部,每一个的FlowLayout
面板

示例代码:

frame = new JFrame(); 
    frame.setBounds(100, 100, 450, 300); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    { 
     panel = new JPanel(); 
     frame.getContentPane().add(panel, BorderLayout.NORTH); 
     panel.setLayout(new GridLayout(0, 1, 0, 0)); 
     { 
      panel_1 = new JPanel(); 
      panel.add(panel_1); 
      { 
       lblPanelFlowlayout = new JLabel("Panel 2: FlowLayout"); 
       panel_1.add(lblPanelFlowlayout); 
      } 
     } 
     { 
      panel_2 = new JPanel(); 
      panel.add(panel_2); 
      { 
       lblPanel = new JLabel("Panel 3: FlowLayout"); 
       panel_2.add(lblPanel); 
      } 
     } 
    } 

您可以用流1添加尽可能多的新面板如你所愿。每次你做无线电通信时,你现在将下一个面板设置为激活状态(可能会动态创建)。