Java 教案第12章 GUI初步复习过程.docx

上传人:b****3 文档编号:865101 上传时间:2022-10-13 格式:DOCX 页数:14 大小:1.41MB
下载 相关 举报
Java 教案第12章 GUI初步复习过程.docx_第1页
第1页 / 共14页
Java 教案第12章 GUI初步复习过程.docx_第2页
第2页 / 共14页
Java 教案第12章 GUI初步复习过程.docx_第3页
第3页 / 共14页
Java 教案第12章 GUI初步复习过程.docx_第4页
第4页 / 共14页
Java 教案第12章 GUI初步复习过程.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

Java 教案第12章 GUI初步复习过程.docx

《Java 教案第12章 GUI初步复习过程.docx》由会员分享,可在线阅读,更多相关《Java 教案第12章 GUI初步复习过程.docx(14页珍藏版)》请在冰豆网上搜索。

Java 教案第12章 GUI初步复习过程.docx

Java教案第12章GUI初步复习过程

 

Java教案-第12章GUI初步

第12章GUI初步

.1介绍(Introduction)

为JavaGUI程序设计应用程序接口(API)是面向对象编程最精彩的内容,图形用户界面(GUI)可以通过键盘或鼠标来响应用户的操作。

这章首先介绍GUI编程基础,然后用GUI来讲述面向对象编程,特别是要讲框架和组件的关系,包括容器,布局管理器,颜色,字体,边框和图标等。

.2Swing和AWT

前面第8章,稍微介绍了一些面向对象编程的GUI例子,显示GUI组件,使用了诸如Jbutton,Jlabel等GUI组件。

为什么这些GUI前会有一个J?

为什么不用Button?

事实上,在java.awt包中已经有一个名为Button的类。

当Java问世的时候,称AWT(AbstractWindowsToolkit)的GUI类就被绑定在类库中。

对于开发简单的图形用户界面,AWT是胜任的,但如果开发综合,复杂的GUI工程却力不从心。

另外,AWT是依赖于平台的,即AWT组件的样式与它使用的底层平台相似。

新版本中,许多AWT的用户界面组件被一个更鲁棒,灵活,通用的Swing组件代替。

Swing组件使用Java代码编写,被直接应用在程序上,而不是调用底层的平台服务。

但java.awt.Window或java.awt.Panel的子类除外,因为他们必须使用特定平台本地的GUI来绘制。

Swing组件很少依赖目标平台,很少使用平台下的本地GUI程序,鉴于此,把它称为轻量级组件,而AWT称为重量级组件。

为了和AWT组件进行区分,Swing组件的类命名加前缀J,尽管AWT组件依然被现在版本的Java支持,但最好使用轻量级组件,因为AWT最终会淡出历史舞台,也因此,只介绍Swing组件。

.3JavaGUI与API

GUI的API包含的类可以被分为3类,组件类,容器类,帮助类。

它们的层次关系如图所示。

组件类,如Jbutton等用来创建用户界面。

容器类,如Jframe,Jpanel和Japplet等用来盛载其他组件。

帮助类,如Graphics,Color等用来支持GUI组件。

注意:

Jframe,Japplet,Jdialog和Jcomponent类和它们的子类被组织在Javax.swing包中,其他的类被组织在AWT包中。

12.3.1Component类

Component的实例可以被显示在屏幕上。

Component是所有用户界面类的根类(父类),包含Container类。

Jcomponent类是所有轻量级组件的根类。

Componet和Jcomponent都是抽象类(14章讲解)。

现在只需要知道抽象类和类相似,仅仅是不能创建实例就可以了。

例如,不可以使用newJComponent()来创建一个Jcomponent对象,但可以使用它非抽象子类的构造方法来创建Jcomponent实例。

熟练掌握继承的层次关系非常重要,如下述语句都显示true。

12.3.2Container类

Container类的实例可以盛载Component的实例,是GUI组件,它用来盛载其他GUI组件的。

Window,Panel,Applet,Frame和Dialog都是AWT组件的容器类。

为了配合Swing组件,使用Container,Jframe,Jdialog,Japplet和Jpanel类容易,如下图所述。

12.3.3帮助类

如Graphics,Color,Font,FontMetrics,Dimension和LayoutManager等类是帮助类,它们不是Component的子类。

它们用来描述GUI组件的特性,属性,如下图所示。

注意:

帮助类在AWT包中,Swing组件不能替换所有的AWT,它替换的只有AWT的GUI组件类,因此AWT帮助类仍然在GUI编程中用处很大。

.4Frames框架

为了创建用户界面,需要创建一个frame或一个applet(18章介绍)容器来放置用户界面组件。

12.4.1创建Frame

使用Jframe类来创建一个框架frame,如下所示。

使用Jframe创建一个frame窗口,如下程序。

框架frame的可见性默认为false,因此必须使用frame.setVisible(true)来显示框架。

语句frame.setSize(400,300),设置框架窗口宽400,高300像素,如果不设置大小,则只显示一个标题栏,运行程序后在屏幕显示如下。

Line7使得frame在屏幕中间显示,line8告诉程序当frame被关闭时终止,没有此语句,程序将不能终止,这种情况下只能在Dos(windows平台)命令提示符下,使用Ctrl+C来终止,在Eclipse中将使用红色终止按钮来终止程序。

注意:

要在调用居中语句前设置窗口大小,否则无效。

12.4.2在Frame中添加组件

使用add方法可以为Frame添加组件,如图所示程序。

每一个JFrame都包含一个contentpane(内容面板),内容面板是Container的一个实例。

如按钮等GUI组件会被放置在frame的contentpane中。

在Java早期版本,必须使用getContentPane方法来返回frame的contentpane,然后调用contentpane的add方法为其添加组件,如下所示(教程中示例如此)。

这是非常笨重的,从java5以后的新版本允许直接调用frame的add方法来为contentpane添加组件,如下:

这个新特性称content-pane授权(给frame),严格的说,是一个组件被添加到frame的contentpane。

为简单,称把组件添加到frame中。

一个JButton对象使用newJbutton(“OK”);来创建,使用frame.add(jbtOK)被添加到frame的contentpane中。

方法add(Compunentcomp)定义在Container类中,因为JButton是Component的子类,因此Jbutton的实例同样也是Component的实例,从容器中删除组件使用remove方法,使用方式:

Container.remove(jbtOK);

当运行程序时,窗口会被显示,按钮会总是出现在窗口中间,不管窗口是否重新设置大小,总是占据整个窗口。

原因就是组件被contentpane的不仅管理器放置在窗口中,contentpane的默认的布局管理器会把这个按钮放置在窗口的中央。

下节会学习使用其他几种布局管理器,把组件放置在期望的位置。

.5布局管理器

介绍3种布局管理器,FlowLayout,GridLayout和BorderLayout。

12.5.1FlowLayout

FlowLayout是最简单的布局管理器,称流式布局管理器。

组件被从左到右,从上到下的,按它被添加的顺序放置在窗口中。

当一行满之后,会另起一行。

类中包含三个常量,设置组件的对齐方式,FlowLayout.RIGHT,FlowLayout.CENTER,FlowLayout.LEFT。

也可以使用分割线来分割组件,如下所示FlowLayout类图:

下列程序给出一个流式布局,添加三个标签和三个文本框。

为什么使用如上程序来构造一个窗口?

原因有三:

1.创建一个GUI应用意味着创建一个窗口框架,很自然会定义成Jframe的子类。

2.frame会被扩展出新的组件或方法函数。

3.这个类易于重用,例如可以通过创建多个类的实例来创建多个窗口。

同时这种构造程序的方式易读。

从今以后,大多数GUI主类会扩展JFrame类,主类的构造方法会构造用户界面。

主方法创建一个主类的实例并显示窗口框架。

这个例子中FlowLayout布局管理器用来放置组件,如果重新调整窗口大小,组件也会自动被重新安排,如上图所示。

如果把line10语句用setLayout(newFlowLayout(FlowLayout.RIGHT,0,0))来替换,所有组件会被左对齐,并且中间没有间隔线。

等价语句如下:

假设把一个按钮用add方法加入10次,是否会出现10个相同的按钮?

答案是不会,只会出现一个。

不要忘记在设置布局中使用new,如setLayout(newFlowLayout()).

12.5.2GridLayout

GridLayout也称网格布局(矩阵布局),组件按被添加的先后顺序放置在网格中,放置顺序从左到右,从上到下,如下是网格布局类的UML类图。

可以设定网格的行和列数,基本原则如下:

1.行数或列数可以为0,但不能都为0.如果一个为0,另外一个不为0,那么非0的维数被设定,0维数由布局管理器动态决定。

如,设置0行3列,包含10个组件,那么GridLayout会创建固定的3列,并动态生成4行,最后一行包含一个组件。

如果设定3行0列,10个组件,那么固定为3行,动态设定4列,最后一行包含2个组件。

2.如果行和列都不为0,行数为主导参数,即行数被固定,列数自动计算生成。

如果设定3行3列,10个组件,那么会设置3行固定,4列动态设定,最后一行包含2个组件。

如下列所示程序使用网格布局。

如果重新设定框架大小,布局的按钮保持不变,网格布局中所有的组件给出相同的大小。

把line10用setLayout(newGridLayout(3,10))来替换,仍然是3行,2列。

如果定义4行2列网格或2行2类网格会怎样?

自己试验下。

前2种布局,添加组件顺序非常重要,因为它决定自己在容器中的位置。

12.5.3BorderLayout

BorderLayout把容器分为5个区域,东南西北中。

通过add(Component,index),添加组件,其中index是以下5个常数之一,BorderLayout.EAST,BorderLayout.SOUTH,BorderLayout.WEST,BorderLayout.NORTH或BorderLayout.CENTER,类图如下图所示。

组件以合适的大小被放置在相应的区域,南北组件可以水平方向延伸,东西组件可以垂直方向延伸,中间组件可以向水平,垂直方向延伸以填满整个空间。

如下程序可以说明BorderLayout的布局,在东南西北中添加5个按钮,标签分别为East,South,West,North和Center。

不必要使得组件填满所有的5个区域,如果把East按钮移调,并重新运行程序,会发现中间的按钮会向右延伸并占满East区域。

如果add方法中没指明区域,则默认为中间区域,如此添加2个组件,则只有第二个组件会被显示。

12.5.4布局管理器属性

布局管理器有动态调整的属性。

FlowLayout有alignment,hgap,vgap属性。

可以使用setAlignment,setHgap和setVgap方法来设定对齐和垂直,水平分割。

GrideLayout有rows,columns,hgap和vgap属性,可以使用setRows,setColumns,setHgap和setVgap方法来设定行数,列数即水平和垂直分割。

BorderLayout有hgap和vgap属性,可以使用setHgap和setVgap方法来设置水平和垂直分割。

在前面的部分中,因为没有设置布局管理器属性,匿名的布局管理器在发挥作用。

如果需要动态的改变属性,那么布局管理器就必须显式被一个变量引用,不能匿名。

可以通过变量改变布局管理器的属性值,例如下述代码。

.6Panels面板和子容器

假设想要在一个框架中放置是个按钮和一个文本框,按钮按网格布局,但文本框要放置在分开的一行。

单单使用一个容器很难达到预期要求。

但可以把容器分成几个部分

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

当前位置:首页 > 农林牧渔 > 畜牧兽医

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

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