javaswing 布局管理器

为了容器组件实现与平台无关的自动合理排序,swing采用了布局管理器来管理组件的排放、位置、大小等布置任务。
NORTH、WEST、EAST、等被定义为静态常量,可以直接引用

边框布局管理器(BorderLayout)

主要是两个语句
JFrame jf = new JFrame(“测试程序”);
jf.setLayout(new BorderLayout());
JPanel p1 = new JPanel();
p1.setLayout(new BorderLayout());

通过控件的add方法来添加的
add(组件名称,方位)

在这里插入图片描述

package GuiLayout;

import javax.swing.*;
import java.awt.*;

public class BorderLayoutDemo {
  
    static final int WIDTH=300;
    static final int HEIGHT=200;
    public static void main(String[] args) {
        JFrame jf = new JFrame("测试程序");

        jf.setSize(WIDTH,HEIGHT);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setVisible(true);
        JPanel contentPane = new JPanel();  //创建一个中间容器
        jf.setContentPane(contentPane); //添加中间容器

        /**
         * 1,先写基本的内容,比如:JFrame框架,设置大小,关闭方式,设置可见,
         * 2,是否需要创建中间容器
         * 3,将中间容器添加到顶层容器中
         * 4,开始写组件,需要用到的组件
         * 5,创建布局管理器
         * 6, 将其设置为需要的布局管理器
         * 7,将组件添加到中间容器中
         */

//        jf.setLayout(new BorderLayout());     书上写的是将顶层容器设置为边框布局
        contentPane.setLayout(new BorderLayout());  //然后我将中间容器设置为中间布局,结果是一样的

        JButton b1 = new JButton("工作");
        JButton b2 = new JButton("生活");
        JButton b3 = new JButton("上班");
        JButton b4 = new JButton("购物");
        JButton b5 = new JButton("饮食");

        contentPane.add(b1,"North");
        contentPane.add(b2,"South");
        contentPane.add(b3,"East");
        contentPane.add(b4,"West");
        contentPane.add(b5,"Center");



    }
}

例子2:
边框布局管理器 嵌套 边框布局管理器
在这里插入图片描述

package GuiLayout;

import javax.swing.*;
import java.awt.*;
//展示如何使用BorderLayout布局管理器将组件进行布局

/**
 * 1,先写基本的内容,比如:JFrame框架,设置大小,关闭方式,设置可见,
 * 2,是否需要创建中间容器
 * 3,将中间容器添加到顶层容器中
 * 4,开始写组件,需要用到的组件
 * 5,创建布局管理器
 * 6, 将其设置为需要的布局管理器
 * 7,将组件添加到中间容器中
 */
public class BorderLayoutDemo1 {
    static final int WIDTH=300;
    static final int HEIGHT=200;
    public static void main(String[] args) {

        JFrame jf = new JFrame("测试程序");
        jf.setSize(WIDTH,HEIGHT);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setVisible(true);
        //创建一个中间容器,
        JPanel contentPane = new JPanel();  //这是一个总的中间容器
        //添加中间容器
        jf.setContentPane(contentPane);


        //创建25个普通按钮组件
        JButton b1 = new JButton("人民币");
        JButton b2 = new JButton("美元");
        JButton b3 = new JButton("日元");
        JButton b4 = new JButton("欧元");
        JButton b5 = new JButton("英镑");

        JButton c1 = new JButton("白菜");
        JButton c2 = new JButton("胡萝卜");
        JButton c3 = new JButton("青菜");
        JButton c4 = new JButton("西红柿");
        JButton c5 = new JButton("土豆");

        JButton d1 = new JButton("铅笔");
        JButton d2 = new JButton("钢笔");
        JButton d3 = new JButton("水笔");
        JButton d4 = new JButton("黑笔");
        JButton d5 = new JButton("彩笔");

        JButton e1 = new JButton("键盘");
        JButton e2 = new JButton("鼠标");
        JButton e3 = new JButton("主机");
        JButton e4 = new JButton("电脑");
        JButton e5 = new JButton("硬盘");

        JButton f1 = new JButton("冰红茶");
        JButton f2 = new JButton("饮料");
        JButton f3 = new JButton("果茶");
        JButton f4 = new JButton("奶茶");
        JButton f5 = new JButton("蜜雪冰城");

//        BorderLayout lay = new BorderLayout();
//        //创建一个布局管理器对象,将中间容器设置为此布局管理器
//        jf.setLayout(lay);


        jf.setLayout(new BorderLayout());   //布局管理器设置为BorderLayout方式
        //再创建5个中间容器
        JPanel p1 = new JPanel();
        JPanel p2 = new JPanel();
        JPanel p3 = new JPanel();
        JPanel p4 = new JPanel();
        JPanel p5 = new JPanel();
        //将这5个小容器设置为BorderLayout布局管理器格式
        p1.setLayout(new BorderLayout());
        p2.setLayout(new BorderLayout());
        p3.setLayout(new BorderLayout());
        p4.setLayout(new BorderLayout());
        p5.setLayout(new BorderLayout());

        //将5个中间容器再放到另一个中间容器中
        contentPane.add(p1,"North");
        contentPane.add(p2,"South");
        contentPane.add(p3,"East");
        contentPane.add(p4,"West");
        contentPane.add(p5,"Center");


        p1.add(b1,"North");
        //将5个普通按钮组件分别按照东南西北中5个方位添加到中间容器中
        p1.add(b2,"South");
        p1.add(b3,"East");
        p1.add(b4,"West");
        p1.add(b5,"Center");

        p2.add(c1,"North");
        //将5个普通按钮组件分别按照东南西北中5个方位添加到中间容器中
        p2.add(c2,"South");
        p2.add(c3,"East");
        p2.add(c4,"West");
        p2.add(c5,"Center");

        p3.add(d1,"North");
        //将5个普通按钮组件分别按照东南西北中5个方位添加到中间容器中
        p3.add(d2,"South");
        p3.add(d3,"East");
        p3.add(d4,"West");
        p3.add(d5,"Center");

        p4.add(e1,"North");
        //将5个普通按钮组件分别按照东南西北中5个方位添加到中间容器中
        p4.add(e2,"South");
        p4.add(e3,"East");
        p4.add(e4,"West");
        p4.add(e5,"Center");

        p5.add(f1,"North");
        //将5个普通按钮组件分别按照东南西北中5个方位添加到中间容器中
        p5.add(f2,"South");
        p5.add(f3,"East");
        p5.add(f4,"West");
        p5.add(f5,"Center");
    }
}

BoxLayout箱式布局管理器

swing 提供的box类就是箱式布局类,他的默认布局管理器就是boxlayout,在箱式布局管理器中包括两种箱子,一种是水平箱,另外一种是垂直箱子
箱式布局组件之间没有空隙,那么就要通过填充物组件来提供空隙,
箱式布局管理器提供了3种填充物,支柱、固定区、弹簧。

箱式布局管理器和网格布局管理器相似,前者为箱子,后者为网格形式。

在这里插入图片描述

package GuiLayout;

import javax.swing.*;
import java.awt.*;
/**
 * 1,先写基本的内容,比如:JFrame框架,设置大小,关闭方式,设置可见,
 * 2,是否需要创建中间容器
 * 3,将中间容器添加到顶层容器中
 * 4,开始写组件,需要用到的组件
 * 5,创建布局管理器
 * 6, 将其设置为需要的布局管理器
 * 7,将组件添加到中间容器中
 */
public class BoxLayoutDemo1 extends JFrame {
    private static final int WIDTH=400;
    private static final int HEIGHT=300;

    public BoxLayoutDemo1(){
        setTitle("测试箱式布局管理器");
        setSize(WIDTH,HEIGHT);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);

        Container con = getContentPane();   //创建一个中间容器,因为是继承,所以不需要写,额外的东西
        JLabel label1=new JLabel("姓名");
        JTextField textField1 = new JTextField(10);
        textField1.setMaximumSize(textField1.getPreferredSize());

        Box hbox1 = Box.createHorizontalBox();  //创建一个水平箱子
        hbox1.add(label1);
        //在水平箱子上添加一个标签组件,并且创建一个不可见的20个单位的组件
        //在这之后再添加一个文本框组件
        hbox1.add(Box.createHorizontalStrut(10));
        hbox1.add(textField1);

        JLabel label2 = new JLabel("密码");
        JTextField textField2= new JTextField(10);
        textField2.setMaximumSize(textField2.getPreferredSize());
        Box hbox2=Box.createHorizontalBox();        //创建一个水平箱子
        hbox2.add(label2);

        //在水平箱子上添加一个标签组件,并创建一个不可见的20个单位的组件
        //在这之后添加文本框组件
        hbox2.add(Box.createHorizontalStrut(10));
        hbox2.add(textField2);

        //创建两个普通按钮,并创建一个水平箱子,并将两个按钮放置到一个普通箱子中
        JButton button1=new JButton("确定");
        JButton button2=new JButton("取消");
        Box hbox3=Box.createHorizontalBox();
        hbox3.add(button1);
        hbox3.add(button2);

        hbox3.add(Box.createHorizontalStrut(10));       //这个填充物是我自己加的

        //创建一个垂直盒子,并将两个水平盒子添加到其中,并创建一个横向的glue组件
        Box vbox = Box.createVerticalBox();
        vbox.add(hbox1);
        vbox.add(hbox2);
        vbox.add(Box.createVerticalGlue());

        vbox.add(hbox3);
        //将垂直盒子添加到BorderLayout布局管理器中的中间位置
        con.add(vbox,BorderLayout.CENTER);
    }

    public static void main(String[] args) {
        new BoxLayoutDemo1();
    }

}

FlowLayout流式布局管理器

这种布局管理器的策略也很简单,按照控件加入的先后顺序,从左向右排列,一行排满了,再换下一行,然后继续从左到右排列。每一行的组件都是居中排列的。
FlowLayout布局管理器同样是通过先创建对象、再利用其内置方法和变量来布局的组件。

import javax.swing.*;
import java.awt.*;

public class FlowLayoutDemo {
    public static void main(String[] agrs)  {
        JFrame jFrame=new JFrame("FlowLayoutDemo");    //创建Frame窗口

        JPanel jPanel=new JPanel();    //创建面板
        JButton btn1=new JButton("1");    //创建按钮
        JButton btn2=new JButton("2");
        JButton btn3=new JButton("3");
        JButton btn4=new JButton("4");
        JButton btn5=new JButton("5");
        JButton btn6=new JButton("6");
        JButton btn7=new JButton("7");
        JButton btn8=new JButton("8");
        JButton btn9=new JButton("9");

        jPanel.add(btn1);    //面板中添加按钮
        jPanel.add(btn2);
        jPanel.add(btn3);
        jPanel.add(btn4);
        jPanel.add(btn5);
        jPanel.add(btn6);
        jPanel.add(btn7);
        jPanel.add(btn8);
        jPanel.add(btn9);

        //向JPanel添加FlowLayout布局管理器,将组件间的横向和纵向间隙都设置为20像素
        jPanel.setLayout(new FlowLayout(FlowLayout.LEADING,20,20));
        jPanel.setBackground(Color.gray);    //设置背景色
        jFrame.add(jPanel);    //添加面板到容器
        jFrame.setBounds(300,200,300,150);    //设置容器的大小
        jFrame.setVisible(true);
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

在这里插入图片描述

参考链接:
https://blog.csdn.net/qq_27870421/article/details/88150242

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值