图形化用户界面(GUI)

2017-12-11 15:13:29

一,布局

1.组件
以图形化的方式显示在屏幕上的,和用户进行交互的对象,就叫做组件。
组件包括:菜单,标签,文本框(密码框),滚动条,单选,复选,按钮等等
2.容器
组件不能独立的显示出来,只能将组件放在容器里,才能正常的显示。
将组件合理有序的排列和分布在容器中,(包括组件的位置,大小)称为布局(Layout)。

二,布局管理器

每个容器都有自己的布局管理器,当某个容器内的组件需要改变其属性时,就需要调用其组件所在容器的布局管理器。Awt中常见的布局管理器有:BorderLayout(边办布局管理器),FlowLayout(流式布局管理器),GridLayout(网格布局管理器)

下面是一个简单的窗体创建

````
import javax.swing.*;

public class Test extends JFrame {

JButton an1 = null;

public static void main(String[] args)
{
    Test test = new Test();
}

public Test()
{
    this.setTitle("测试一下");
    this.setSize(500,500);
    this.setLocation(300,300);
    an1 = new JButton("一个按钮");
    this.add(an1);
    this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    this.setVisible(true);
}

}

````
运行程序,如图所示

边界布局管理器
  1. 继承JFrame类
  2. 在最上方定义组件
  3. 在构造方法中创建组件
  4. 在构造方法中添加组件
  5. 设置窗体属性
  6. 显示窗体
  7. 在主函数中创建对象
    所有布局管理器都可以添加任意组件,我在这里只是拿按钮举个例子,并不是只能添加按钮,代码如下:
import javax.swing.*;
import java.awt.*;

public class Test extends JFrame {

    JButton bn1,bn2,bn3,bn4,bn5;

    public static void main(String[] args)
    {
        Test test = new Test();

    }

    public Test()
    {
        bn1 = new JButton("东方");
        bn2 = new JButton("西方");
        bn3 = new JButton("南方");
        bn4 = new JButton("北方");
        bn5 = new JButton("中部");

        this.add(bn1, BorderLayout.EAST); //括号中的参数都是固定的,顺序不能改变
        this.add(bn2,BorderLayout.WEST); //前面是对象,后面是布局管理器
        this.add(bn3,BorderLayout.SOUTH);
        this.add(bn4,BorderLayout.NORTH);
        this.add(bn5,BorderLayout.CENTER);

        //如果不是五个按钮全部添加,则会以扩充中部为主进行填充,但中部不会被其它四个填充。

        this.setTitle("边界布局BorderLayout");
        this.setSize(380,320);
        this.setLocation(200,200);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //这句一定要写对,因为这句写的不对运行时看不出来
        this.setVisible(true);
    }
}
流式布局管理器

下面是一个流式布局的简单代码

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

public class Test extends JFrame {

    JButton[] btn = {null,null,null,null,null,null,null,null};

    public static void main(String[] args)
    {
        Test test = new Test();
    }

    public Test()
    {
        btn[0] = new JButton("话梅");
        btn[1] = new JButton("果浦");
        btn[2] = new JButton("薯片");
        btn[3] = new JButton("饼干");
        btn[4] = new JButton("巧克力");
        btn[5] = new JButton("腰果");
        btn[6] = new JButton("锅巴");
        btn[7] = new JButton("开心果");
        //this.setLayout(new FlowLayout()); //由于java默认的是边界布局管理器,添加流式布局管理器,以免添加出现错误
//        this.setLayout(new FlowLayout(FlowLayout.LEFT)); //向左对齐
        this.setLayout(new FlowLayout(FlowLayout.RIGHT)); //向右对齐
        this.add(btn[0]);
        this.add(btn[1]);
        this.add(btn[2]);
        this.add(btn[3]);
        this.add(btn[4]);
        this.add(btn[5]);
        this.add(btn[6]);
        this.add(btn[7]);

        this.setTitle("流式布局FlowLayout");
        this.setSize(380,120);
        this.setLocation(200,200);
        this.setResizable(false); //禁止窗口大小手动人为调整
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }

}

执行结果如图所示

网格布局管理器

下面是一个网格布局简单代码

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

public class Test extends JFrame {

    JButton[] btn = {null,null,null,null,null,null,null,null,null};

    int s = 9;

    public static void main(String[] args)
    {
        Test test = new Test();
    }

    public Test()
    {
        btn[0] = new JButton("话梅");
        btn[1] = new JButton("果浦");
        btn[2] = new JButton("薯片");
        btn[3] = new JButton("饼干");
        btn[4] = new JButton("巧克力");
        btn[5] = new JButton("腰果");
        btn[6] = new JButton("锅巴");
        btn[7] = new JButton("开心果");
        btn[8] = new JButton("杏仁");
        this.setLayout(new GridLayout(3,3,15,15));

        for (int i = 0; i < s; i++) {
            this.add(btn[i]);
        }

        this.setTitle("网格布局FlowLayout");
        this.setSize(380,320);
        this.setLocation(200,200);
        this.setResizable(false); //禁止窗口大小手动人为调整
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }

}

执行结果如图所示