AWT编程学习笔记原创 含简略代码Word下载.docx
《AWT编程学习笔记原创 含简略代码Word下载.docx》由会员分享,可在线阅读,更多相关《AWT编程学习笔记原创 含简略代码Word下载.docx(63页珍藏版)》请在冰豆网上搜索。
![AWT编程学习笔记原创 含简略代码Word下载.docx](https://file1.bdocx.com/fileroot1/2022-11/30/06514097-720a-46be-8381-23c89027fa89/06514097-720a-46be-8381-23c89027fa891.gif)
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.Panel;
importjava.awt.TextField;
publicclassTestPanel{
Framef=newFrame();
//创建一个Panel容器
Panelp=newPanel();
//给Panel容器中添加组件
p.add(newTextField(20));
p.add(newButton("
按钮"
));
//将Panel添加到Frame窗口中
f.add(p);
f.setBounds(50,100,300,400);
运行之后我们会看到这么一个窗口:
2.3ScrollPane
ScrollPane是一个带滚动条的容器,不能独立存在。
ScrollPane具有以下特点:
●可以作为容器来盛装其他组件,当组件占用空间过大时会自动产生滚动条。
●不能单独存在
●默认使用BorderLayout作为布局管理器
我们看一个简单的例子:
importjava.awt.ScrollPane;
publicclassTestScrollPane{
//创建一个ScrollPane容器,指定总是显示滚动条
ScrollPanesp=newScrollPane(ScrollPane.SCROLLBARS_ALWAYS);
//为ScrollPane容器添加组件
sp.add(newTextField(20));
sp.add(newButton("
f.add(sp);
f.pack();
运行上面的程序我们会看到如下的结果:
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.FlowLayout;
publicclassTestFlowLayout{
//设置Frame容器使用FlowLayout布局管理器
f.setLayout(newFlowLayout(FlowLayout.LEFT,20,5));
//向窗口中添加按钮
for(inti=0;
i<
20;
i++)
{
f.add(newButton("
+i));
}
运行上边的代码我们会看到如下结果:
3.2BorderLayout布局管理器
BorderLayout布局管理器将容器分为WAST,SOUTH,WEST,NORTH,CENTER五个区域。
使用BorderLayout时需要注意两点:
1.向使用BorderLayout布局管理器的容器中添加组件时,如果没指定哪个区域,则默认为中间
2.如果向同一区域添加组件时,前边的会被后边的覆盖
BorderLayout布局管理器有如下两个构造器
●BorderLayout();
使用默认水平,垂直间距来创建布局管理器
●BorderLayout(inthagp,intvagp);
使用指定的水平,垂直间距来创建布局管理器。
importjava.awt.BorderLayout;
importjavax.swing.border.Border;
publicclassTestBorderLayout{
f.setLayout(newBorderLayout(30,5));
f.add(newButton("
北"
),BorderLayout.SOUTH);
西"
),BorderLayout.WEST);
南"
),BorderLayout.NORTH);
东"
),BorderLayout.EAST);
中"
运行结果:
3.3GirdLayout布局管理器
GridLayout布局管理器将容器分割成纵横线分割的网络,每个网格所占的区域大小不同,往使用GirdLayout的容器中添加组件时,默认从左向右,从上往下。
GridLayout有如下两个构造器
●GirdLayout(introws,intcols);
采用指定的行数,列数,默认横向间距,纵向间距将容器分割成多个网络
●GridLayout((introws,intcols,inthagp,intvagp);
我们用GridLayout和BorderLayout开发一个计算器的界面:
importjava.awt.GridLayout;
publicclassTestGridLayout{
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);
运行后我们看到这么一个简单的计算器界面
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组件位横跨多少网格
//设置受该对象控制的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<
name.length;
i++){
p.add(name[i],newButton(name[i]));
//控制显示上一张的按钮
Buttonprevious=newButton("
上一张"
previous.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
c.previous(p);
//显示容器里的钱一张卡片
}
});
//控制显示下一张的按钮
Buttonnext=newButton("
下一张"
next.addActionListener(newActionListener(){
c.next(p);
//控制显示第一张的按钮
Buttonfirst=newButton("
first.addActionListener(newActionListener(){
c.first(p);
//控制显示最后一张的按钮
Buttonlast=newButton("
最后一张"
last.addActionListener(newActionListener(){
c.last(p);
//控制显示第三章的按钮
Buttonthird=newButton("
third.addActionListener(newActionListener(){
c.show(p,"
p2.add(previous);
p2.add(last);
p2.add(first);
p2.add(next);
p2.add(third);
f.add(p2,BorderLayout.SOUTH);
newTestCardLayout().init();
运行结果如下:
绝对定位:
Java可以对GUI组件进行绝对定位,在java中采用绝对定位的步骤如下:
●将Container的布局管理器设置车改null:
setLayout(null);
●往容器中添加组件时,先调用setBounds()或setSize()的方法来设置组件的大小,位置。
或直接创建GUI组件时通过构造器来指定该组件的位置,大小,然后将该组件添加到容器中。
下面的程序示范了如何使用绝对定位来控制窗口中的GUI组件
publicclassTestNullLayout{
Buttonb1=newButton("
第一个按钮"
Buttonb2=newButton("
第二个按钮"
//将容器的布局管理器设置为null
f.setLayout(null);
//定义按钮的位置,大小
b1.setBounds(20,30,90,28);
f.add(b1);
b2.setBounds(50,45,120,35);
f.add(b2);
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));
按钮一"
按钮二"
按钮三"
newTestBoxLayout().init();
BoxLayout通常和Box容器结合使用,Box是一个特殊的容器。
他有点像Panel,但该容器默认使用BoxLayout布局管理器。
Box提供了如下两个静态方法来床架Box对象
●CreateHorizontalBox();
创建一个水平排列的Box容器
●CreateVeriticalBox();
创建一个垂直排列的Box容器
我们写个程序来测试一下Box容器
publicclassTestBox{
//定义一个水平放置组件的BOx对象
Boxx=Box.createHorizontalBox();
//定义一个垂直房子组件的Box对象
Boxy=Box.createVerticalBox();
x.add(newButton("
y.add(newButton("
按钮四"
f.add(x,BorderLayout.NORTH);
f.add(y);