- _nosay
图形化用户界面(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);
}
}
````
运行程序,如图所示
边界布局管理器
- 继承JFrame类
- 在最上方定义组件
- 在构造方法中创建组件
- 在构造方法中添加组件
- 设置窗体属性
- 显示窗体
- 在主函数中创建对象
所有布局管理器都可以添加任意组件,我在这里只是拿按钮举个例子,并不是只能添加按钮,代码如下:
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);
}
}
执行结果如图所示