栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【JAVA】-- GUI图形用户界面(布局管理器、FlowLayout、BorderLayout、GridLayout、GridBagLayout使用)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【JAVA】-- GUI图形用户界面(布局管理器、FlowLayout、BorderLayout、GridLayout、GridBagLayout使用)

一、布局管理器

组件在容器中的位置和尺寸是由布局管理器决定的。

Swing常用布局有四种:FlowLayout(流式布局管理器)、BorderLayout(边界布局管理器)、GridLayout(网格布局管理器)、GridBagLayout(网格包布局管理器)。

Swing容器在创建时都会使用一种默认的布局管理器,在程序中可以通过调用容器对象的setLayout()方法设置布局管理器,通过布局管理器自动进行组件的布局管理。

二、FlowLayout

FlowLayout属于流式布局管理器,是最简单的布局管理器。

容器会将组件按照添加顺序从左向右放置,当到达容器的边界时,自动将组件放到下一行的开始位置, 这些组件可以左对齐、居中对齐(默认)和右对齐的方式排列。

常用方法及变量如下:

方法及常量类型功能描述
public FlowLayout()构造方法组件默认居中对齐,水平、垂直间距默认为5个单位
public FlowLayout(int align)构造方法指定组件相对于容器的对齐方式,水平、垂直间距默认为5个单位
public FlowLayout(int align,int hgap,int vgap)构造方法指定组件的对齐方式和水平、垂直间距
public static final int CENTER常量居中对齐
public static final int LEADING常量与容器的开始端对齐方式一样
public static final int LEFT常量左对齐
public static final int RIGHT常量右对齐

参数hgap和参数vgap分别设定组件之间的水平和垂直间隙,可以填入一个任意数值。

使用示例:

import javax.swing.*;
import java.awt.*;
public class FlowLayout_CSDN {
    public static void main(String[] args) {
        JFrame frame = new JFrame("hello word");
        //设置窗体中的布局管理器为FlowLayout,所有的组件居中对齐,水平和垂直间距为3
        frame.setLayout(new FlowLayout(FlowLayout.CENTER,3,3));
        JButton button = null;
        for(int i = 0;i<9;i++){
            button = new JButton("按钮"+i);
            frame.add(button);
        }
        frame.setSize(280,250);
        frame.setVisible(true);
    }
}

运行结果:

 FlowLayout布局管理器的特点就是可以将所有组件像流水一样一次进行排列,不需要用户明确的设定,但是在灵活性上相对差了点。如:将窗口拉伸变宽,但按钮大小和间距保持不变。

 三、BorderLayout

BorderLayout(边界布局管理器)是一种较为复杂的布局方式,将窗体划分为五个区域。组件可以被放置在这五个区域中的任意一个区域中。

 改变窗体大小时,NORTH和SOUTH区域高度不变,宽度调整,WEST和EAST区域宽度不变,高度调整。

向BorderLayout窗体中添加组件,需要调用add(Component comp,Object constraints)方法,

其中参数comp表示要添加的组件,参数constraints用于指定组件添加方式以及添加位置,可以使用5个常量:EAST、SOUTH、WEST、NORTH、CENTER。

常用方法及常量如下:

方法及常量类型共能描述
public BorderLayout()构造方法构造没有间距的布局器
public BorderLayout(int align,int hgap,int vgap)构造方法构造有水平和垂直间距的布局器
public static final String EAST常量将组件设置在东区域
public static final String WEST常量将组件设置在西区域
public static final String SOUTH常量将组件设置在南区域
public static final String NORTH常量将组件设置在北区域
public static final String CENTER常量将组件设置在中区域

使用示例:

import javax.swing.*;
import java.awt.*;
public class BorderLayout_CSDN  extends JFrame{
    public BorderLayout_CSDN(){
        //设置为边界布局,组件间横向,纵向间距均为5像素
        this.setLayout(new BorderLayout(5,5));
        setFont(new Font("Helvetica",Font.PLAIN,14));//正常风格
        getContentPane().add("South",new JButton(BorderLayout.SOUTH));//将按钮添加到窗体面板
        getContentPane().add("North",new JButton(BorderLayout.NORTH));
        getContentPane().add("East",new JButton(BorderLayout.EAST));
        getContentPane().add("West",new JButton(BorderLayout.WEST));
        getContentPane().add("Center",new JButton(BorderLayout.CENTER));
    }

    public static void main(String[] args) {
        BorderLayout_CSDN f = new BorderLayout_CSDN();
        f.setTitle("边界布局");
        f.pack();//调整窗口大小,以适合其组件的大小和布局
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLocationRelativeTo(null);//窗体居中显示
    }
}

运行结果:

 

如果不指定添加到哪个区域,则默认添加到CENTER区域,并且只能放置一个组件,如果添加多个组件,后放入的组件会覆盖先放入的。

四、GridLayout

GridLayout布局管理器是以网格的形式管理容器中组件布局的。

使用纵横线将容器分成n行m列大小相等的网格,每个网格中放置一个组件。

与FlowLayout类似,但不同的是,GridLayout将自动占据网格的整个区域。

常用方法如下:

方法声明功能描述
GridLayout()默认只有一行,每个组件占一列
GridLayout(int rows,int cols)指定容器的行数和列数
GridLayout(int rows,int cols,int hgap,int vgap)指定容器的行数和列数以及组件之间的水平、垂直间距

参数rows代表行数,cols代表列数,hgap和vgap规定水平和垂直方向的间隙。

水平间隙指的是网格之间的水平距离,垂直间隙指的是网格之间的垂直距离。

使用示例:

import java.awt.*;
public class GridLayout_CSDN {
    public static void main(String[] args) {
        Frame f = new Frame("GridLayout");//创建窗体
        f.setLayout(new GridLayout(3,3));//设置该窗体为3*3的网格
        f.setSize(300,300);
        f.setLocation(400,300);
        for (int i = 1;i<=9;i++){
            Button btn = new Button("btn"+i);
            f.add(btn);
        }
        f.setVisible(true);
    }
}

运行结果:

 

五、GridBagLayout

GridBagLayout是最灵活的、最复杂的布局管理器,与GridLayout布局管理器类似,不同的是,GridBagLayout允许网格中的组件大小各不相同,而且允许一个组件跨越一个或多个网格。

使用步骤如下:

1、创建GridBagLayout布局管理器,设置采用该管理器

例:

GridBagLayout layout = new GridBagLayout();

container.setLayout(layout);

2、创建GridBagContraints对象,并设置该对象的相关属性。

例:

GridBagConstraints constraints = new GridBagConstraints();

constraints.gridx = 1;                //设置网格的左上角横向索引

constraints.gridy = 1;                //设置网格的左上角纵向索引

constraints.gridwidth = 1;            //设置组件横向跨越的网格

constraints.gridheight = 1;          //设置组件纵向跨越的网格

3、调用GridBagLayout对象的setConstraints()方法,建立GridBagConstraints对象和受控组件之间的关联。

例:

layout.setConstraints(component,constraints);

4、向容器中添加组件

例:

container.add(component);

使用GridBagLayout布局管理器的关键在于GridBagConstraints对象,是每个组件布局的核心类,GridBagConstraints类中有很多用于设置约束条件的属性。

常用属性如下:

属性作用

gridx和gridy

设置组件所在网格的横向和纵向索引(即所在的行和列)。如果将gridx和 gridy的值设置为GridBagConstraints.RELATIVE(默认值),表示当前组件紧跟在上一个组件后面。

gridwidth和gridheight

设置组件横向、纵向跨越几个网格,两个属性的默认值都是1。如果把这两个属性的值设为GridBagConstraints.REMAINER表示组件在当前行或列上为最后一个组件。如果把这两个属性的值设为GridBagConstraints.RELATIVE,表示组件在当前行或列上为倒数第二个组件。

fill

如果组件的显示区域大于组件需要的大小,设置组件改变方式,该属性接收以下几个属性值:

l NONE :默认,不改变组件大小。 l HORIZONTAL :使组件水平方向足够长以填充显示区域,但是高度不变, l VERTICAL :使组件垂直方向足够高以填充显示区域,但长度不变。 l BOTH :使组件足够大,以填充整个显示区域。
weightx和weighty

设置组件占领容器中水平方向和垂直方向多余空白的比例(也称为权重)。假设容器的水平方向放置三个组件,组件的weightx属性值分别为1、2、3,当容器宽度增加60个像素时,这三个容器分别增加10、20、和30的像素。weightx和weighty属性的默认值是0,即不占领多余的空间。

注意:如果希望组件的大小随容器的增大而增大,必须同时设置GridBagConstraints对象的fill属性和weightx、weighty属性。

使用示例:

import java.awt.*;
class Layout extends Frame{
    public Layout(String title){
        GridBagLayout layout = new GridBagLayout();
        GridBagConstraints c = new GridBagConstraints();
        this.setLayout(layout);
        c.fill = GridBagConstraints.BOTH;//设置组件横向纵向可以拉伸
        c.weightx = 1;//设置横向权重为1
        c.weighty = 1;//设置纵向权重为1
        this.addComponent("btn1",layout,c);
        this.addComponent("btn2",layout,c);
        this.addComponent("btn3",layout,c);
        c.gridwidth = GridBagConstraints.REMAINDER;
        this.addComponent("btn4",layout,c);
        c.weightx = 0;
        c.weighty = 0;
        this.addComponent("btn5",layout,c);
        c.gridwidth = 1;//设置组件跨一个网格
        this.addComponent("btn6",layout,c);
        c.gridwidth = GridBagConstraints.REMAINDER;
        this.addComponent("btn7",layout,c);
        c.gridheight = 2;//纵向跨两个网格
        c.gridwidth = 1;
        c.weightx = 2;
        c.weighty = 2;
        this.addComponent("btn8",layout,c);
        c.gridwidth = GridBagConstraints.REMAINDER;
        c.gridheight = 1;
        this.addComponent("btn9",layout,c);
        this.addComponent("btn10",layout,c);
        this.setTitle(title);
        this.pack();
        this.setVisible(true);
    }
    //增加组件中的方法
    private void addComponent(String name,GridBagLayout layout,GridBagConstraints c){
        Button bt = new Button(name);
        layout.setConstraints(bt,c);
        this.add(bt);
    }
}
public class GridBagLayout_CSDN{
    public static void main(String[] args) {
        new Layout("GridBagLayout");
    }
}

运行结果:

 btn1-4和btn8-10都将权重设置为大于0,拉伸窗口会随着增大,

btn5-7将权重设置为0,高度在拉伸不会变化,但长度会变化。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/948794.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号