/**
 * 1、继承JFrame类;
 * 2、定义需要的组件;
 * 3、在构造函数里创建组件;
 * 4、在构造函数添加组件;
 * 5、在构造函数设置布局管理器;
 * 6、在构造函数显示窗体。
 */
package com.login;import javax.swing.*;import java.awt.*;public class Test extends JFrame
{
JPanel jp1,jp2,jp3;
JLabel jlb1,jlb2,jlb3,jlb4;
JList jl1,jl2;
JSplitPane about,updown; public static void main(String[] args)
{
new Test();
}
public Test()
{
// 设置布局格式

jp1 = new JPanel();
jp2 = new JPanel();
jp3 = new JPanel();

jlb1 = new JLabel(">>员工管理");
jlb2 = new JLabel(">>部门管理");
jlb3 = new JLabel(">>薪资管理");
jlb4 = new JLabel(">>系统管理");

jp2.setLayout(new GridLayout(4,1));
jp1.setBackground(Color.ORANGE);

jp2.add(jlb1);
jp2.add(jlb2);
jp2.add(jlb3);
jp2.add(jlb4);
jp2.setBackground(Color.CYAN);

this.add(jp1,BorderLayout.NORTH);
this.add(jp2,BorderLayout.WEST);
this.add(jp3,BorderLayout.CENTER);

this.setSize(800, 500);
this.setTitle("主界面");
this.setLocation(500, 300);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}请注意红色的代码
问题:
1、当使用红色代码时,这四个JLabel就会把JPanel平均分配,中间的间距很大
2、当不使用红色代码时,这四个JLabel就会拍成一行,我的目的是:这四个JLabel按顺序排成4行,也就是说,每个jbl占一行,中间的间距要合理,不要太大也不要太小,最好可以设置中间的间距。

解决方案 »

  1.   

    setLayout的布局问题1。
    FlowLayout
    public FlowLayout(int align,int hgap,int vgap)
    创建一个新的流布局管理器,具有指定的对齐方式以及指定的水平和垂直间隙。 
    对齐参数的值必须是以下之一:FlowLayout.LEFT、FlowLayout.RIGHT、FlowLayout.CENTER、FlowLayout.LEADING 或 FlowLayout.TRAILING。
    参数:
    align - 对齐值
    hgap - 组件之间以及组件与 Container 的边之间的水平间隙
    vgap - 组件之间以及组件与 Container 的边之间的垂直间隙
    2GridLayout
    public GridLayout(int rows,
                      int cols,
                      int hgap,
                      int vgap)创建具有指定行数和列数的网格布局。给布局中的所有组件分配相等的大小。 
    此外,将水平和垂直间距设置为指定值。水平间距将置于列与列之间。将垂直间距将置于行与行之间。rows 和 cols 中的一个可以为零(但不能两者同时为零),这表示可以将任何数目的对象置于行或列中。所有 GridLayout 构造方法都服从这一规定。
    参数:
    rows - 该 rows 具有表示任意行数的值零
    cols - 该 cols 具有表示任意列数的值零
    hgap - 水平间距
    vgap - 垂直间距 
    3,BorderLayout
    public BorderLayout(int hgap,
                        int vgap)用指定的组件之间的水平间距构造一个边界布局。水平间距由 hgap 指定,而垂直间距由 vgap 指定。参数:
    hgap - 水平间距。
    vgap - 垂直间距。
    4,CardLayout
    public CardLayout(int hgap,
                      int vgap)创建一个具有指定的水平和垂直间隙的新卡片布局。水平间隙置于左右边缘。垂直间隙置于上下边缘。参数:
    hgap - 水平间隙。
    vgap - 垂直间隙。
      

  2.   

    jp2.setLayout(new GridLayout(4,4));至于间距可以参照1楼给的 FlowLayout(int align,int hgap,int vgap)进行设置。
      

  3.   


    JPanel默认的布局方式就是FlowLayout,使用FlowLayout的结果就是,四个JLabel排成一行,根本达不到我想要的目的我期待的结果是:>>员工管理
    >>部门管理
    >>薪资管理
    >>系统管理不想使用绝对定位,因为我还要再JP3的位置(中间位置)实现功能。
      

  4.   

    jp2.setLayout(new GridLayout(4,1,heigh));
    里面几个参数记不清了,但是后面是可以加参数来设置间距的,你试试看行不行。
      

  5.   

    想要竖排 使用
        public static javax.swing.Box createVerticalBox();