作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在设置为 FlowLayout
的 JPanel
中添加组件,即使该行的左边没有空格,它们也不会移动到下一行。 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();
}
}
我也尝试过设置面板的宽度,但它不起作用!
最佳答案
FlowLayout 旨在根据在一行中显示的所有组件计算其首选大小。 FlowLayout 还尊重组件的首选大小。
setLayout(new FlowLayout(FlowLayout.LEFT));
您正在覆盖框架的默认布局管理器,因此现在框架将遵循添加到框架的面板的首选大小,这意味着所有组件都将显示在一行上。
去掉那个语句。
现在组件将能够包裹在可用空间中,因为默认情况下面板将添加到 BorderLayout.CENTER,它会占用框架中的所有可用空间。
然而,上述解决方案仅在将组件添加到 BorderLayout 的 CENTER 时才有效。通常,您不应使用 setSize(),而应使用 pack() 来使所有框架以其首选大小显示。
要获得更灵活的布局来计算面板的适当首选尺寸,请查看 Wrap Layout .此类扩展 FlowLayout 以计算首选大小。
关于java - 如何将组件移动到 FlowLayout 中的下一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40914492/
我是一名优秀的程序员,十分优秀!