AWT编程学习笔记原创 含简略代码.docx

上传人:b****5 文档编号:4441660 上传时间:2022-12-01 格式:DOCX 页数:63 大小:260.54KB
下载 相关 举报
AWT编程学习笔记原创 含简略代码.docx_第1页
第1页 / 共63页
AWT编程学习笔记原创 含简略代码.docx_第2页
第2页 / 共63页
AWT编程学习笔记原创 含简略代码.docx_第3页
第3页 / 共63页
AWT编程学习笔记原创 含简略代码.docx_第4页
第4页 / 共63页
AWT编程学习笔记原创 含简略代码.docx_第5页
第5页 / 共63页
点击查看更多>>
下载资源
资源描述

AWT编程学习笔记原创 含简略代码.docx

《AWT编程学习笔记原创 含简略代码.docx》由会员分享,可在线阅读,更多相关《AWT编程学习笔记原创 含简略代码.docx(63页珍藏版)》请在冰豆网上搜索。

AWT编程学习笔记原创 含简略代码.docx

AWT编程学习笔记原创含简略代码

1.AWT

1.1AWT概念

AWT全称“AbstractWindowToolkit”,即:

抽象窗口工具集。

为java应用程序提供了基本的图形组件。

ATW是窗口框架,它从不同的操作平台提取出共同组件,当程序运行时,将这些组件的创建和动作委托程序所在的运行平台。

2.AWT容器

2.1基本介绍

什么是容器?

任何窗口都可以被分解成一个空的容器,容器内盛装了大量的基本组件,通过设置这些组件的大小,属性,位置等,就可以将该容器和组件组成一个整体的窗口。

容器(Container)是Commponent的子类,因此容器对象本身也是一个组件。

Commponent类有如下的方法来设置组件的大小,位置,属性和可见性等:

setLocation(intx,inty):

设置组件的位置

setSize(intwidth,intheight):

设置组件的宽度,高度

setBounds(intx,inty,intwidth,intheight):

同时设置组件的位置,大小。

setVisible(Booleanb):

设置组件的可见性。

除此之外,容器还具有盛装其他组件的功能,容器类(Container)主要提供了一下几个常用的方法来访问容器内的组件:

Componentadd(Componentcomp)向容器中添加其他组件

ComponentgetCommponentAt(intx,inty):

返回指定点的组件

IntgetComponentCount():

返回容器内的组件个数

Component[]getComponents():

返回容器里的所有组件

AWT主要提供了两种类型的容器

Window:

可独立存在的窗口

Panel:

可作为容器容纳其他组件,但不能独立存在,必须被添加到其他容器中。

AWT容器的继承关系图:

ScrollPane:

增加滚动条

Frame:

常见的窗口

Dialog:

对话框

例子:

importjava.awt.Frame;

publicclassTestFrame{

publicstaticvoidmain(String[]args){

Framef=newFrame("测试窗口");

//设置窗口的大小,位置

f.setBounds(50,100,400,300);

//设置窗口的可见性,默认是隐藏的

f.setVisible(true);

}

}

运行上面的程序,显示了一个简单的窗口

2.2Panel

Panel容器具有以下几个特点:

●可作为容器来盛装其他组件,为放置组件提供空间

●不能单独存在,必须依附于其他容器

●默认使用FlowLayout作为布局管理器

下面的例子使用Panel作为容器来盛装一个文本框和按钮

例子:

importjava.awt.Button;

importjava.awt.Frame;

importjava.awt.Panel;

importjava.awt.TextField;

publicclassTestPanel{

publicstaticvoidmain(String[]args){

Framef=newFrame();

//创建一个Panel容器

Panelp=newPanel();

//给Panel容器中添加组件

p.add(newTextField(20));

p.add(newButton("按钮"));

//将Panel添加到Frame窗口中

f.add(p);

f.setBounds(50,100,300,400);

f.setVisible(true);

}

}

运行之后我们会看到这么一个窗口:

2.3ScrollPane

ScrollPane是一个带滚动条的容器,不能独立存在。

ScrollPane具有以下特点:

●可以作为容器来盛装其他组件,当组件占用空间过大时会自动产生滚动条。

●不能单独存在

●默认使用BorderLayout作为布局管理器

我们看一个简单的例子:

importjava.awt.Button;

importjava.awt.Frame;

importjava.awt.ScrollPane;

importjava.awt.TextField;

publicclassTestScrollPane{

publicstaticvoidmain(String[]args){

Framef=newFrame("测试窗口");

//创建一个ScrollPane容器,指定总是显示滚动条

ScrollPanesp=newScrollPane(ScrollPane.SCROLLBARS_ALWAYS);

//为ScrollPane容器添加组件

sp.add(newTextField(20));

sp.add(newButton("按钮"));

f.add(sp);

f.pack();

f.setVisible(true);

}

}

运行上面的程序我们会看到如下的结果:

3.布局管理器

为了使生成的图形用户界面具有良好的与平台无关性,java语言中,提供了布局管理器来管理组件在容器中的布局,而不使用直接设置的位置和大小。

AWT提供了FlowLayout,BorderLayout,GridLayout,GridBigLayout,CardLayout五个常用的布局管理器。

3.1FlowLayout布局管理器

在FlowLayout布局管理器中,组件像流水一样向某个方向流动(排列),遇到边界就折回。

FlowLayout有如下三个构造器

●FlowLayout();使用默认的排序方式,默认垂直,水平创建FlowLayout布局管理器

●FlowLayout(intalign)使用指定的对齐方式。

●FlowLayout(intalign,inthgap,intvgap)使用指定的对齐方式,指定水平,垂直,水平间距,创建FlowLayout布局管理器

Hgap,vgap代表水平,垂直间距

我们来看下边的例子:

importjava.awt.Button;

importjava.awt.FlowLayout;

importjava.awt.Frame;

publicclassTestFlowLayout{

publicstaticvoidmain(String[]args){

Framef=newFrame("测试窗口");

//设置Frame容器使用FlowLayout布局管理器

f.setLayout(newFlowLayout(FlowLayout.LEFT,20,5));

//向窗口中添加按钮

for(inti=0;i<20;i++)

{

f.add(newButton("按钮"+i));

}

f.pack();

f.setVisible(true);

}

}

运行上边的代码我们会看到如下结果:

3.2BorderLayout布局管理器

BorderLayout布局管理器将容器分为WAST,SOUTH,WEST,NORTH,CENTER五个区域。

使用BorderLayout时需要注意两点:

1.向使用BorderLayout布局管理器的容器中添加组件时,如果没指定哪个区域,则默认为中间

2.如果向同一区域添加组件时,前边的会被后边的覆盖

BorderLayout布局管理器有如下两个构造器

●BorderLayout();使用默认水平,垂直间距来创建布局管理器

●BorderLayout(inthagp,intvagp);使用指定的水平,垂直间距来创建布局管理器。

例子:

importjava.awt.BorderLayout;

importjava.awt.Button;

importjava.awt.Frame;

importjavax.swing.border.Border;

publicclassTestBorderLayout{

publicstaticvoidmain(String[]args){

Framef=newFrame("测试窗口");

f.setLayout(newBorderLayout(30,5));

f.add(newButton("北"),BorderLayout.SOUTH);

f.add(newButton("西"),BorderLayout.WEST);

f.add(newButton("南"),BorderLayout.NORTH);

f.add(newButton("东"),BorderLayout.EAST);

f.add(newButton("中"));

f.pack();

f.setVisible(true);

}

}

运行结果:

3.3GirdLayout布局管理器

GridLayout布局管理器将容器分割成纵横线分割的网络,每个网格所占的区域大小不同,往使用GirdLayout的容器中添加组件时,默认从左向右,从上往下。

GridLayout有如下两个构造器

●GirdLayout(introws,intcols);采用指定的行数,列数,默认横向间距,纵向间距将容器分割成多个网络

●GridLayout((introws,intcols,inthagp,intvagp);

我们用GridLayout和BorderLayout开发一个计算器的界面:

importjava.awt.BorderLayout;

importjava.awt.Button;

importjava.awt.Frame;

importjava.awt.GridLayout;

importjava.awt.Panel;

importjava.awt.TextField;

publicclassTestGridLayout{

publicstaticvoidmain(String[]args){

Framef=newFrame();

Panelp1=newPanel();

p1.add(newTextField(30));

f.add(p1,BorderLayout.NORTH);

//设置Panel使用GridLayout布局

Panelp2=newPanel();

p2.setLayout(newGridLayout(3,5,4,4));

String[]name={"0","1","2","3","4","5","6","7","8","9",

"+","-","*","/","."};

//向Panel2中添加按钮

for(Stringn:

name)

{

p2.add(newButton(n));

}

f.add(p2);

f.pack();

f.setVisible(true);

}

}

运行后我们看到这么一个简单的计算器界面

3.3GridBagLayout布局管理器

GirdBagLayout布局管理器功能最强大。

但也是最复杂的。

于GridLayout布局管理器不同的,一个组件可以跨越多个网格。

并可以设置网格的大小,从而增加了布局的灵活性

使用GridBagLayout布局管理的步骤如下:

●创建GridBagLayout布局管理器,并指定GUI容器使用该布局,代码如下:

GridBagLayoutgb=newGridBagLayout();

Constainer.setLayout(gb);

●创建GridBagLayout对象,并设置该对象的相关属性,代码如下:

gbc,gridx=2;//设置受该对象控制的GUI组件位于网格的横向索引

gbc,gridy=2;//设置受该对象控制的GUI组件位于网格的纵向索引

gbc,gridwidth=2;//设置受该对象控制的GUI组件位横跨多少网格

gbc,gridwidth=2;//设置受该对象控制的GUI组件位纵跨多少网格

●调用GridBagLayout对象的方法来建立GridBagConstainer对象和受控组件之间的关联,代码如下:

gb.setConstainer(c,gbc);//设置c组件受gbc对象控制

●添加组件

Constainer.add(c);

使用GridBagLayout布局管理器的关键在于GridBagConstainer,他才是精确控制某个GUI组件的核心,该类有如下几个方法:

●Gridxgridy设置受该对象控制的GUI组件的左上角所在的横向索引,纵向索引。

●Gridwidthgridheight设置受该对象控制的GUI组件横向,纵向跨越了多少个网格

●Fill:

设置受该对象控制的GUI组件如何占领空白区域。

●Ipadx、ipady:

设置受该对象控制的GUI组件横向,纵向的内部填充大小,即在该组件的最小尺寸的基础上还需要增加多大。

●Insets:

何止受该对象控制的GUI组件的外部填充大小,即组件边界于显示区域边界之间的距离

●Anchor:

设置受该对象GUI组件在其显示区域之中的定位方式。

●Weightx,weighty:

设置受该对象控制的GUI组件占领多余空间的水平,垂直增加比例。

默认值都是0,即不占用多余空间

3.4CardLayout

CardLayout布局管理器以时间而非空间来管理组件,他将加入容器的组件看成一叠卡片,每次只有最上边的Commponent才可以显示。

CardLayout提供了如下两个构造器:

●CardLayout():

创建默认的CardLayout布局管理器

●CardLayout(inthgap,intvgap):

通过指定卡片于容器边界的距离,来创建CardLayout布局管理器

CardLayout用于控制组件可见的5个方法:

●First(Canstainertarget):

显示target容器中的第一张卡片

●Last(Canstainertarget):

显示target容器中的最后一张卡片

●Previous(Canstainertarget):

显示target容器中前一张卡片

●Next(Canstainertarget):

显示target容器中下一张卡片

●Show(Canstainertarget,Stringname):

显示target容器中指定卡片的名字

如下的例子程序示范了CardLayout布局管理器的用法:

publicclassTestCardLayout{

Framef=newFrame();

String[]name={"第一张","第二张","第三张","第四张","第五张"};

Panelp=newPanel();

CardLayoutc=newCardLayout();

publicvoidinit(){

p.setLayout(c);

for(inti=0;i

p.add(name[i],newButton(name[i]));

}

Panelp2=newPanel();

//控制显示上一张的按钮

Buttonprevious=newButton("上一张");

previous.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEvente){

c.previous(p);//显示容器里的钱一张卡片

}

});

//控制显示下一张的按钮

Buttonnext=newButton("下一张");

next.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEvente){

c.next(p);//显示容器里的钱一张卡片

}

});

//控制显示第一张的按钮

Buttonfirst=newButton("第一张");

first.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEvente){

c.first(p);//显示容器里的钱一张卡片

}

});

//控制显示最后一张的按钮

Buttonlast=newButton("最后一张");

last.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEvente){

c.last(p);//显示容器里的钱一张卡片

}

});

//控制显示第三章的按钮

Buttonthird=newButton("第三张");

third.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEvente){

c.show(p,"第三张");//显示容器里的钱一张卡片

}

});

p2.add(previous);

p2.add(last);

p2.add(first);

p2.add(next);

p2.add(third);

f.add(p);

f.add(p2,BorderLayout.SOUTH);

f.pack();

f.setVisible(true);

}

publicstaticvoidmain(String[]args){

newTestCardLayout().init();

}

}

运行结果如下:

绝对定位:

Java可以对GUI组件进行绝对定位,在java中采用绝对定位的步骤如下:

●将Container的布局管理器设置车改null:

setLayout(null);

●往容器中添加组件时,先调用setBounds()或setSize()的方法来设置组件的大小,位置。

或直接创建GUI组件时通过构造器来指定该组件的位置,大小,然后将该组件添加到容器中。

下面的程序示范了如何使用绝对定位来控制窗口中的GUI组件

publicclassTestNullLayout{

Framef=newFrame();

Buttonb1=newButton("第一个按钮");

Buttonb2=newButton("第二个按钮");

publicvoidinit(){

//将容器的布局管理器设置为null

f.setLayout(null);

//定义按钮的位置,大小

b1.setBounds(20,30,90,28);

f.add(b1);

b2.setBounds(50,45,120,35);

f.add(b2);

f.setBounds(50,100,400,300);

f.setVisible(true);

}

publicstaticvoidmain(String[]args){

newTestNullLayout().init();

}

}

运行效果如下:

3.5BoxLayout布局管理器

GridBagLayout布局管理器功能虽然强大,但是太复杂了。

所以Swing引入了一个新的布局管理器。

BoxLayout布局管理器可以在水平和垂直位置上放置组件。

BoxLayout提供了如下的简单构造器:

●BoxLayout(Containertarget,intaxis):

创建基于target容器的布局管理器、该布局管理器里的组件按照axis方向排列。

我们来写一个简单的例子:

publicclassTestBoxLayout{

Framef=newFrame();

publicvoidinit()

{

//添加BOxLayout布局管理器到容器中,并指定排列方式:

垂直

f.setLayout(newBoxLayout(f,BoxLayout.Y_AXIS));

f.add(newButton("按钮一"));

f.add(newButton("按钮二"));

f.add(newButton("按钮三"));

f.pack();

f.setVisible(true);

}

publicstaticvoidmain(String[]args){

newTestBoxLayout().init();

}

}

运行结果如下:

BoxLayout通常和Box容器结合使用,Box是一个特殊的容器。

他有点像Panel,但该容器默认使用BoxLayout布局管理器。

Box提供了如下两个静态方法来床架Box对象

●CreateHorizontalBox();创建一个水平排列的Box容器

●CreateVeriticalBox();创建一个垂直排列的Box容器

我们写个程序来测试一下Box容器

publicclassTestBox{

Framef=newFrame();

//定义一个水平放置组件的BOx对象

Boxx=Box.createHorizontalBox();

//定义一个垂直房子组件的Box对象

Boxy=Box.createVerticalBox();

publicvoidinit()

{

x.add(newButton("按钮一"));

x.add(newButton("按钮二"));

y.add(newButton("按钮三"));

y.add(newButton("按钮四"));

f.add(x,BorderLayout.NORTH);

f.add(y);

f.pack();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 设计艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1