如何将组件移动到FlowLayout中的下一行?

时间:2016-12-01 15:28:40

标签: java swing layout-manager flowlayout

我在JPanel中添加了设置为FlowLayout的组件,即使该行左侧没有空格,它们也不会在下一行上移动。 Here is the screenshot of the problem

import javax.swing.*;
import java.awt.*;
import javax.swing.border.BevelBorder;
import javax.swing.border.TitledBorder;
public class GUI extends JFrame
{
    private JLabel jlfname;
    private JPanel p1;
    private JTextField t1;
    private JLabel jllname;
    private JTextField t2;
    private JLabel jltitle;
    private JTextField t3;
    GUI()
    {
        jlfname=new JLabel("First Name : ");
        p1=new JPanel();
        TitledBorder titled = new TitledBorder("Name");
        p1.setBorder(titled);
        t1=new JTextField(10);
        jllname=new JLabel("Last Name : ");
        t2=new JTextField(10);
        jltitle=new JLabel("Title : ");
        t3=new JTextField(10);
        //Add in Pannel
        p1.setLayout(new FlowLayout());
        p1.add(jlfname);
        p1.add(t1);
        p1.add(jllname);
        p1.add(t2);
        p1.add(jltitle);
        p1.add(t3);
        //Add in Frame
        add(p1);
        setSize(550,500);
        setTitle("JFrame Tutorial");
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new FlowLayout(FlowLayout.LEFT));
        setResizable(false);
        setVisible(true);
    }
    public static void main(String [] args)
    {
        new GUI();
    }
}

我也尝试设置面板的宽度,但它不起作用!

1 个答案:

答案 0 :(得分:3)

FlowLayout旨在根据显示在一行上的所有组件计算其首选大小。 FlowLayout还尊重组件的首选大小。

setLayout(new FlowLayout(FlowLayout.LEFT));

您正在覆盖框架的默认布局管理器,因此现在框架将遵循添加到框架的面板的首选大小,这意味着所有组件将显示在一条线上。

摆脱那种说法。

现在组件将能够包装在可用空间中,因为默认情况下,面板将被添加到BorderLayout.CENTER中,占用框架中的所有可用空间。

但是,只有将组件添加到BorderLayout的CENTER时,上述解决方案才有效。通常你不应该使用setSize(),而是使用pack()来显示所有框架的首选大小。

要获得更灵活的布局,以计算面板的正确首选尺寸,请查看Wrap Layout。此类扩展了FlowLayout以计算首选大小。