第2章 GUI 编程1.ppt_第1页
第2章 GUI 编程1.ppt_第2页
第2章 GUI 编程1.ppt_第3页
第2章 GUI 编程1.ppt_第4页
第2章 GUI 编程1.ppt_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、GUI 编程,第2章,2,目标,了解 AWT 包及其组件 掌握如何创建 GUI 程序 掌握 AWT 组件的基本用法 掌握如何使用布局管理器构造复杂的布局,3,抽象窗口工具包,图形用户界面(GUI)可以通过键盘或鼠标来响应用户的操作。 抽象窗口工具包(AWT)是一组Java类,此组Java类允许创建图形用户界面(GUI)。 AWT提供用于创建生动而高效的GUI的各种组件。,4,java.awt 包中的类体系结构,5,容器,可以存放组件的区域,可在容器上进行绘制和着色 java.awt包中的Container类可直接或间接派生出两个常用容器:框架(Frame类)和面板(Panel类)。 框架是一个

2、带有边框的独立的窗口。 面板是包含在窗口中的一个不带边框的区域。,6,容器 框架,框架是独立于Applet和浏览器的一个窗口。 可以通过以下任一构造函数来创建: Frame():创建一个不含标题的标准窗口 Frame(String Title): 创建一个含有标题的窗口,这个标题是由参数title指定的。 当一个Frame窗口被创建以后,需要调用setSize()方法来设置窗口的大小,并调用setVisible()来显示窗口。,7,容器 - 面板,面板不是一个单独的窗口,它只是包含在窗口中的一个区域。 面板是可以将许多组件组合起来的一种容器。 最简单的创建面板的方式就是通过面板的构造函数 Pa

3、nel() 来进行。 必须将面板添加到窗体中。,8,使用容器示例,import java.awt.*; class PanelTest extends Panel public static void main(String args) PanelTest p= new PanelTest(); Frame f=new Frame(正在测试面板!); f.add(p); f.setSize(300,200); f.setVisible(true); ,使用GUI组件必须导入该包,将面板添加到 框架窗体中,9,AWT组件,组件指可以放置在用户界面上的任何东西,可以将组件设置为可见或重新调整其大小

4、。 AWT支持的组件:标签、文本域、文本区、按钮、复选框、选择框等。 高级组件包括滚动条、滚动窗格和对话框。 向窗口加入一个组件:首先生成所需组件的实例,然后调用add()方法,此方法是在Container类中定义的。,10,不同组件,标签,文本域,文本区,按钮,11,标签,可以通过以下任一构造函数来创建: Label( ) : 新建一个空标签 Label(String labeltext): 新建一个包含给定文本的标签 Label(String labeltext, int alignment) :新建一个包含给定对齐方式的标签,对齐方式可以为 Label.LEFT、Label.RIGHT

5、或 Label.CENTER,通常用来指明项目的用途 标签不可以被用户编辑,12,标签的常用方法,public String getText() 获取此标签的文本。 返回: 此标签的文本,如果此文本已设置为 null,则返回 null。 public void setText(Stringtext) 将此标签的文本设置为指定的文本。 参数: text - 此标签显示的文本。如果 text 为 null,则将其作为一个空字符串 显示。,13,文本域,可以通过以下任一构造函数来创建: TextField() : 新建一个文本域 TextField(int columns) : 新建一个包含给定列数

6、的文本域 (列是近似平均字符宽度,它与平台有关 ) TextField(String s) : 新建一个包含给定字符串的文本域 TextField(String s, int columns) : 新建一个包含给定字符串和列数的文本域,一种用来输入文本的GUI组件 只能接受一行输入,14,文本域的常用方法,public void setEchoChar(charc) 设置此文本字段的回显字符。 public void setText(Stringt) 将此文本组件显示的文本设置为指定文本。 public String getText() 返回此文本组件表示的文本。默认情况下,此文本是一个空字符

7、串。 public void setColumns(intcolumns) 设置此文本字段中的列数。列是近似平均字符宽度,它与平台有关。,15,标签和文本域使用示例,import java.awt.*; class TextLabelDemo extends Frame Label lblName=new Label(“名称 :”); TextField txtName=new TextField(20); public TextLabelDemo (String title) super(title); setLayout(new FlowLayout(); add(lblName); ad

8、d(txtName); public static void main(String args) TextLabelDemo t=new TextLabelDemo(正在测试组件!); t.setSize(300,200); t.show(); ,新建一个标签,新建一个文本域,添加到窗口,16,文本区,可以通过以下构造函数来创建: TextArea( ) : 新建一个TextArea TextArea(int rows, int cols) : 新建一个包含给定行数和列数的TextArea TextArea(String text, int rows, int cols) : 新建一个包含给定

9、字符串、行数和列数的TextArea,要接受输入多行文本时使用 可以包括滚动条,. . . TextArea txtComment=new TextArea(); add(txtComment); . . .,17,文本区的常用方法,public void append(Stringstr) 将给定文本追加到文本区的当前文本。 注意,传递 null 或不一致的参数是无效的,并且将导致不确定的行为。 public void replaceRange(Stringstr, intstart, intend) 用指定替换文本替换指定开始位置与结束位置之间的文本。结束处的文本不会被替换。开始位置处的文

10、本会被替换(除非开始位置与结束位置相同)。文本位置是从零开始的。插入子字符串的长度可以与所替换文本的长度不同。 注意,传递 null 或不一致的参数是无效的,并且将导致不确定的行为。 参数: str - 用于替换的非 null 文本 start - 开始位置 end - 结束位置,18,文本区的常用方法,public void insert(Stringstr, intpos) 在此文本区的指定位置插入指定文本。 注意,传递 null 或不一致的参数是无效的,并且将导致不确定的行为。 参数: str - 要插入的非 null 文本 pos - 插入的位置,19,文本区的常用方法,public

11、int getRows() 返回此文本区的行数。 返回: 此文本区中的行数 public void setRows(introws) 设置此文本区的行数。 参数: rows - 行数,20,public int getColumns() 返回此文本区中的列数。 返回: 此文本区中的列数 public void setColumns(intcolumns) 设置此文本区的列数。 参数: columns - 列数,21,按钮,可以使用以下任一构造函数来创建按钮: Button() : 新建一个空的按钮 Button(String text) : 新建一个包含给定字符串的按钮,按钮是任何GUI都不可

12、或缺的组件 用来捕捉用户操作的最为简便的方式,. . . Button btnOk=new Button(确定!); Button btnCancel=new Button(取消!); add(btnOk); add(btnCancel); . . .,22,按钮的常用方法,public String getLabel() 获取此按钮的标签。 返回: 按钮的标签,如果按钮没有标签,则返回 null。 public void setLabel(Stringlabel) 将按钮的标签设置为指定的字符串。 public void addActionListener(ActionListenerl)

13、添加指定的动作侦听器,以接收发自此按钮的动作事件。当用户在此按钮上按下或释放鼠标时,发生动作事件。如果 l 为 null,则不抛出任何异常,也不执行任何动作。 参数: l - 动作侦听器,23,复选框,可以使用以下任一构造函数来创建复选框: - Checkbox():创建一个空的复选框,且未被选中 - Checkbox(String text):创建一个用给定字符串作为标签的复选框,且未被选中 - Checkbox(String text,Boolean on):创建一个标签由参数text指定的复选框,允许通过参数on设定复选框的初始状态。,用于多选项的用户输入,用户可以通过单击复选框来选定或

14、取消选定某选项。,24,复选框的常用方法,public String getLabel() 获取此复选框的标签。 返回: 此复选框的标签,如果此复选框没有标签,则返回 null。 public void setLabel(Stringlabel) 将此复选框的标签设置为字符串参数。 参数: label - 设置为新标签的字符串,如果没有标签,则该参数为 null。,25,复选框的常用方法,public boolean getState() 确定此复选框是处于“开”状态,还是处于“关”状态。boolean 值 true 指示此复选框处于“开”状态,false 指示此复选框处于“关”状态。 返回:

15、 以 boolean 值形式表示的此复选框的状态 public void setState(booleanstate) 将此复选框的状态设置为指定状态。boolean 值 true 指示此复选框处于“开”状态,false 指示此复选框处于“关”状态。 注意,此方法应主要用于初始化复选框的状态。以编程方式设置复选框的状态,这不 会触发 ItemEvent。触发 ItemEvent 的唯一方式是用户交互。 参数: state - 以 boolean 值形式表示的复选框的状态,26,单选按钮,可以通过复选框组生成一系列互斥的复选框,实现单选按钮功能。 在一组单选按钮中只能选择一个按钮。 首先创建一个

16、 CheckboxGroup 对象。 CheckboxGroup cg=new CheckboxGroup(); 然后再创建各单选按钮。 Checkbox male=new Checkbox(男,cg,true); Checkbox female=new Checkbox(女,cg,false);,27,也可以先创建普通Checkbox按钮,再创建CheckboxGroup对象,让后调用 public void setCheckboxGroup(CheckboxGroupg) 将此复选框的组设置为指定复选框组。如果此复选框已经在另一个复选框组中,则首先从这个复选框组中提取该复选框。 如果此复选

17、框的状态为 true 并且新组已经有一个选定的复选框,则将此复选框的状态更改为 false。如果此复选框的状态为 true,并且新组中没有选定的复选框,则此复选框将成为新组的选定复选框,并且其状态为 true。 参数: g - 新复选框组,如果该参数为 null,则从所有复选框组中移除此复选框,28,复选框和单选按钮使用示例,import java.awt.*; class Qualification extends Frame Checkbox t1=new Checkbox(Visual Basic); Checkbox t2=new Checkbox(Visual C+); Checkb

18、ox t3=new Checkbox(Java); CheckboxGroup cg=new CheckboxGroup(); Checkbox r1=new Checkbox(专科,cg,false); Checkbox r2=new Checkbox(本科,cg,false); Checkbox r3=new Checkbox(硕士,cg,false); Checkbox r4=new Checkbox(博士,cg,false); Label lb1=new Label(您的学历为: ); Label lb2=new Label(您精通的语言为: );,新建复选框,新建一个复选框组,添加

19、单选按钮,public Qualification(String s ) super(s);setLayout(new GridLayout(10,1); add(lb1);add(r1);add(r2);add(r3);add(r4); add(lb2);add(t1);add(t2);add(t3); public static void main(String args) Qualification q=new Qualification (学识!); q.setSize(400,250); q.show( ); ,将单选按钮添加到窗体,将复选框添加到窗体,29,选择框,用 Choice

20、 类可以创建一个选择框 Choice moviestars = new Choice( ); 通过 add () 方法可以添加项目 moviestars.add(安东尼奥.班德拉斯); moviestars.add(莱昂纳多.迪卡普尼奥); moviestars.add(桑德.布洛克); moviestars.add(休.葛兰特); moviestars.add(朱莉亚.罗萡茨);,用来向用户显示一个选择列表,30,选择框的常用方法,public void add(Stringitem) 将一个项添加到此 Choice 菜单中。 参数: item - 要添加的项 public void ins

21、ert(Stringitem, intindex) 将菜单项插入此选择的指定位置上。如果某个索引上存在的项大于等于 index,则将它上移一位,以容纳新的项。如果 index 大于等于此选择中项的数目,则将 item 添加到此选择的结尾处。 如果此项是第一个添加到该选择中的项,则这个项将成为选定项。否则,如果选定项是上移项中的一个,则该选择中的第一个项将成为选定项。如果选定项不在这些上移项中,则它仍然是选定项。 参数: item - 将插入的非 null 项 index - 应该插入项的位置,31,选择框的常用方法,public void remove(Stringitem) 移除 Choic

22、e 菜单中第一个出现的 item。如果正被移除的项是目前选定的项,则该选择中的第一个项将成为选定项。否则,当前选定项仍然是选定项(并且选定的索引被相应地更新)。 参数: item - 将从此 Choice 菜单中移除的项 public void remove(intposition) 从选择菜单的指定位置上移除一个项。如果正被移除的项是目前选定的项,则该选择中的第一个项将成为选定项。否则,当前选定项将仍然是选定项(并且选定的索引被相应地更新)。 参数: position - 项的位置,32,选择框的常用方法,public String getSelectedItem() 获取当前选择的字符串表

23、示形式。 返回: 此选择菜单中当前选定项的字符串表示形式 public int getSelectedIndex() 返回当前选定项的索引。如果没有选定任何内容,则返回 -1。 返回: 当前选定项的索引,如果目前没有选定任何内容,则返回 -1,33,选择框的常用方法,public void select(intpos) 将此 Choice 菜单中的选定项设置为指定位置上的项。 注意,此方法主要应该用于对此组件中某个项的选择的初始化。以编程方式调用此方法不 会触发 ItemEvent。触发 ItemEvent 的唯一方式是通过用户交互。 参数: pos - 指定项的位置 public void

24、select(Stringstr) 将此 Choice 菜单中的选定项设置为其名称等于指定字符串的项。如果有多个项与指定的字符串匹配(相等),则选择具有最小索引的那一个项。 注意,此方法主要应该用于初始化对此组件中某个项的选择。以编程方式调用此方法不 会触发 ItemEvent。触发 ItemEvent 的唯一方式是通过用户交互。 参数: str - 指定的字符串,34,选择框的常用方法,public void addItemListener(ItemListenerl) 添加指定的项侦听器,以接收发自此 Choice 菜单的项事件。通过发送项事件来响应用户输入,但不响应对 select 的调

25、用。如果 l 为 null,则不会抛出异常,并且不执行任何动作。 指定者: 接口 ItemSelectable 中的 addItemListener 参数: l - 项侦听器,35,布局管理器,用户界面上的组件可以按不同方式排列。 Java使用布局管理器来管理这些排列方式。 每当需要重新调整屏幕大小或重新绘制屏幕上任一项目时,就要用到布局管理器。 AWT提供一组用来进行布局管理的类,称为布局管理器或布局。所有布局都实现 LayoutManager接口。,36,布局类型,Java中的布局类型包括以下几种: FlowLayout(流式布局) BorderLayout (边界布局) GridLayo

26、ut(网格布局) GridBagLayout(网格包布局) CardLayout (卡片布局),37,布局类型的选用,每个布局管理器都有自己特定的用途。 要按行和列显示几个同样大小的组件,GridLayout 会比较合 要在尽可能大的空间里显示一个组件,就要选择 BorderLayout 或 GridBagLayout,38,如何设置布局,每个容器(Container对象)都有一个与它相关的缺省的布局管理器。 Applet 的缺省布局是 FlowLayout Frame、Window、Dialog的缺省布局是BorderLayout 在没有设置新的布局前,在容器中添加组件都按照该容器的缺省布局

27、排列。 可以通过setLayout( )方法为容器设置新的布局。,39,FlowLayout,FlowLayout的构造函数有: FlowLayout( ):生成一个默认的流式布局 FlowLayout(int alignment):可以设定每一行组件的对齐方式 FlowLayout(int alignment,int horz,int vert):可以设定组件间的水平和垂直距离,Applet和面板的缺省布局 组件从左上角开始按从左到右、从上到下的方式排列,FlowLayout mylayout = new FlowLayout(); FlowLayout exLayout = new Flo

28、wLayout(FlowLayout.RIGHT); setLayout(exlayout); / 为容器设置新布局,40,BorderLayout 2-1,下面是BorderLayout所定义的构造函数: - BorderLayout( ):生成默认的边界布局 - BorderLayout(int horz,int vert): 可以设定组件间的水平和垂直距离,窗口、框架和对话框等的缺省布局 组件可被置于容器的北、南、东、西或中间位置,41,BorderLayout 2-2,BorderLayout 类定义了几个常量值以指定相应区域: BorderLayout.NORTH 对应容器的顶部 B

29、orderLayout.EAST 对应容器的右部 BorderLayout.SOUTH 对应容器的底部 BorderLayout.WEST 对应容器的左部 BorderLayout.CENTER 对应容器的中部 加入组件方法: void add(Component Obj, int region);,. . . setLayout(new BorderLayout(); Button btnEast=new Button(东); Button btnWest=new Button(西); Button btnNorth=new Button(北); Button btnSouth=new Bu

30、tton(南); Button btnCenter=new Button(中); add(btnEast,BorderLayout.EAST); add(btnWest,BorderLayout.WEST); add(btnNorth,BorderLayout.NORTH); add(btnSouth,BorderLayout.SOUTH); add(btnCenter,BorderLayout.CENTER); . . .,42,GridLayout,GridLayout 类是一个布局处理器,它以矩形网格形式对容器的组件进行布置。容器被分成大小相等的矩形,一个矩形中放置一个组件。例如,下面是

31、一个将六个按钮布置到三行两列中的 applet:,43,GridLayout,import java.awt.*; import java.applet.Applet; public class ButtonGrid extends Applet public void init() setLayout(new GridLayout(3,2); add(new Button(1); add(new Button(2); add(new Button(3); add(new Button(4); add(new Button(5); add(new Button(6); ,44,GridLayo

32、ut,GridLayout的构造函数如下所示: - GridLayout():生成一个单列的网格布局 - GridLayout(int row,int col):生成一个设定行数和列数的网格布局 - GridLayout(int row,int col,int horz,int vert):可以设置组件之间的水平和垂直间隔,用于将容器区域划分为一个矩形网格 组件按行和列排列,. . . Button btn; / 声明按钮数组 String str=1,2,3,4,5,6,7,8,9; setLayout(new GridLayout(3,3); btn=new Buttonstr.lengt

33、h; / 创建按钮数组 for(int i=0;istr.length;i+) btni=new Button(stri); add(btni); ,45,GridLayout,如果容器的 ComponentOrientation 属性是水平从左到右的,则上述示例生成图 1 中所示的输出。如果容器的 ComponentOrientation 属性是水平从右到左的,则该示例生成图 2 所示的输出。,46,GridLayout,通过构造方法或 setRows 和 setColumns 方法将行数和列数都设置为非零值时,指定的列数将被忽略。列数通过指定的行数和布局中的组件总数来确定。因此,例如,如果指定了三行和两列,在布局中添加了九个组件,则它们将显示为三行三列。仅当将行数设置为零时,指定列数才对布局有效。,47,如果row为0(col不能同时为0),则表示行数不限制,按照列数来确定最终需要的行数。比如(0,2),共有9个控件,则需要显示为5行2列。 反之,如果列col为0,则表示列数不限制,完全根据控件总数和row的值计算需要的列数。,48,CardLayout,可存储几个不同的布局。 每个布局就像是一个卡片组中的一张卡片。 在一个给定的时间总会有一张卡片在顶层。 卡片通常为一个 Panel 对象。 每当需要许多面板切换,而

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论