坚持学习java一段时间,最近自己需要做一个小型的系统,所以需要自己将自己的AWT知识巩固一下。
一、4大布局管理器。
1.边界布局BorderLayout
是JFrame和JDialog的默认布局方法,可以看成地图的排列方式,一共四个方位:东西南北和地图一样,不同的是上北和下南都没有中间的位置占有的大,中部的占有最大。
举例:
package com.ly;
import javax.swing.*;
import java.awt.*;
public class demo1 extends JFrame{
JButton jb1,jb2,jb3,jb4,jb5;
public static void main(String[] args) {
// TODO Auto-generated method stub
demo1 d1=new demo1();
}
public demo1()
{
jb1=new JButton("中");
jb2=new JButton("北");
jb3=new JButton("东");
jb4=new JButton("南");
jb5=new JButton("西");
//添加各个组件
this.add(jb1,BorderLayout.CENTER);
this.add(jb2,BorderLayout.NORTH);
this.add(jb3,BorderLayout.EAST);
this.add(jb4,BorderLayout.SOUTH);
this.add(jb5,BorderLayout.WEST);
//设置布局
this.setTitle("边界布局");
this.setSize(300,300);
this.setLocation(200,200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
2.流式布局FlowLayout
这样的布局会使部件想水流一样流动从左到右排列,直到遇到边界后才重新排列。在Panel中默认使用这种排列方式。
举例:
package com.ly;
import java.awt.FlowLayout;
import javax.swing.*;
public class Demo2 extends JFrame{
JButton jb1,jb2,jb3,jb4,jb5;
public static void main(String[] args) {
// TODO Auto-generated method stub
Demo2 d2=new Demo2();
}
public Demo2()
{
jb1=new JButton("1");
jb2=new JButton("2");
jb3=new JButton("3");
jb4=new JButton("4");
jb5=new JButton("5");
this.add(jb1);
this.add(jb2);
this.add(jb3);
this.add(jb4);
this.add(jb5);
//设置布局
this.setLayout(new FlowLayout());
this.setTitle("流布局");
this.pack();
this.setLocation(200,200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
3.GridLayout布局管理器
这样的布局管理将容器分割成纵横线的网络。我个人认为这样的布局方式较上两种都好,因为更加灵活,写一些基本的布局都可以转换。
package com.ly;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import javax.swing.*;
public class Demo3 extends JFrame{
int size=9;
JButton []jbs=new JButton[size];
public static void main(String[] args) {
// TODO Auto-generated method stub
Demo3 d3=new Demo3();
}
public Demo3()
{
for(int i=0;i<size;i++)
{
jbs[i]=new JButton(String.valueOf(i));
}
//设置网格布局
this.setLayout(new GridLayout(3,3));
for(int i=0;i<size;i++)
{
this.add(jbs[i]);
}
this.setTitle("网格布局");
this.setSize(300,300);
this.setLocation(200,200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
4.CardLayout布局器
CardLayout布局器采用时间进行管理组件,可以看层是一个卡片盒,只有最上面的compent可见。
剩下的两种是我体会比较深的,特别是空布局,简直万能,不过就是要自己定位有些麻烦,大家有机会可以试试。
1.null布局
将Container 的布局管理器设置为null,setLayout(null)
再往容器添加时先调用setBounds()和setSize()设置组建大小和位置
2.BoxLayout布局管理器
我没用过这种管理器,不过这种管理器应该很强大,大家试试。
BoxLayout(Cotainer target,int axis) 而布局有axis横向排列和
纵向排列
如:f.setLayout(new BoxLayout(f,BoxLayout.y_AXIS));
BoxLayout通常和Box联合使用
二、AWT的常用组件
直接上程序吧,比较清晰。
1 //AWT基本组件
2 package com.ly.ll;
3 import java.awt.*;
4 import javax.swing.*;
5
6 public class compoment {
7
8 Frame f; //创建窗口
9 Button bt;
10 CheckboxGroup cbg; //复选框组
11 Checkbox male,female,married; //复选框
12 Choice colorChoice; //下拉选框
13 List colorList; //列表选择框
14 TextArea ta; //文本域(多行)
15 TextField name; //文本域(单行)
16
17 public static void main(String []args)
18 {
19 compoment cp=new compoment();
20 }
21
22
23 public compoment()
24 {
25 //创建组件
26 f=new Frame("测试界面");
27 bt=new Button("确认");
28 cbg=new CheckboxGroup();
29 male =new Checkbox("男",cbg,true);
30 female =new Checkbox("女",cbg,false);
31 married =new Checkbox("是否已婚?",false);
32 colorChoice=new Choice();
33 colorList=new List(3,true);
34 ta=new TextArea(5,20); //5行20 列
35 name=new TextField(50); //50列
36
37 //初始化组件
38 colorChoice.add("红");
39 colorChoice.add("黄");
40 colorChoice.add("蓝");
41 colorList.add("红");
42 colorList.add("黄");
43 colorList.add("蓝");
44 //panel装载文本按钮
45 Panel bottom=new Panel();
46 bottom.add(name);
47 bottom.add(bt);
48 f.add(bottom,BorderLayout.SOUTH); //Frame默认边界布局
49
50 Panel p2=new Panel();
51 p2.add(colorChoice);
52 p2.add(male);
53 p2.add(female);
54 p2.add(married);
55
56 //创建垂直组件BOX
57 Box topList=Box.createVerticalBox();
58 topList.add(ta); //放入多航文本域
59 topList.add(p2);
60
61 Box top=Box.createVerticalBox();
62 top.add(topList);
63 top.add(colorList);
64 f.add(top);
65 f.pack();
66
67 f.setVisible(true);
68 }
69 }
显示结果:
这样就对上面的知识点有了简单的总结和认识,但是要进行开发还是远远不够的
每日一小步,月过一大步~~加油