我在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();
}
}
我也尝试设置面板的宽度,但它不起作用!
答案 0 :(得分:3)
FlowLayout旨在根据显示在一行上的所有组件计算其首选大小。 FlowLayout还尊重组件的首选大小。
setLayout(new FlowLayout(FlowLayout.LEFT));
您正在覆盖框架的默认布局管理器,因此现在框架将遵循添加到框架的面板的首选大小,这意味着所有组件将显示在一条线上。
摆脱那种说法。
现在组件将能够包装在可用空间中,因为默认情况下,面板将被添加到BorderLayout.CENTER中,占用框架中的所有可用空间。
但是,只有将组件添加到BorderLayout的CENTER时,上述解决方案才有效。通常你不应该使用setSize(),而是使用pack()来显示所有框架的首选大小。
要获得更灵活的布局,以计算面板的正确首选尺寸,请查看Wrap Layout。此类扩展了FlowLayout以计算首选大小。