第十一章 - PowerPoint PPT Presentation

slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
第十一章 PowerPoint Presentation
Download Presentation
第十一章

play fullscreen
1 / 129
第十一章
150 Views
Download Presentation
makya
Download Presentation

第十一章

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. 第十一章 图形用户界面设计

  2. 图形用户界面设计 • 11.1 AWT组件概述 • 11.2 布局管理 • 11.3 事件处理

  3. 11.1 AWT组件概述 早期的JDK版本中提供了Java抽象窗口工具集(Abstract Window Toolkit, AWT),其目的是为程序员创建图形用户界面提供支持。AWT组件定义在java.awt包中,包括组件类、组件布局类等 。

  4. Java.awt的继承关系

  5. 1.组件 组件(component)是构成图形用户界面的基本成分和核心元素。组件类(Component)是一个抽象类,是AWT组件类层次结构的根类,实际使用的组件都是Component类的子类。Component类提供对组件操作的通用方法,包括设置组件位置、设置组件大小、设置组件字体、响应鼠标或键盘事件、组件重绘等。

  6. 2.容器 容器(container)是一种特殊组件,它能容纳其他组件。它在可视区域内显示其它组件。容器是组件,在容器之中还可以放置其它容器,可以使用多层容器构成富于变化的界面。

  7. 3.窗口与面板 容器有2种:窗口(window)和面板(panel)。 窗口可独立存在,可被移动,也可被最大化和最小化,有标题栏、边框,可添加菜单栏。 面板不能独立存在,必须包含在另一个容器中。 面板没有标题,没有边框,不可添加菜单栏。 一个窗口可以包含多个面板,一个面板也可以包含另一个面板,但面板不能包含窗口。 窗口类Window和面板类Panel都是容器类Container的子类。

  8. 4.框架与对话框 窗口类Window主要有2个子类:框架类(Frame)和对话框类(Dialog)。

  9. 框架(Frame) • 框架(frame)是一种带标题栏并且可以改变大小的窗口。 • 应用程序中,使用框架作为容器,在框架中放置组件。 • 框架类在实例化时默认是最小化的、不可见的,必须通过setSize()方法设置框架大小,通过setVisible(true)方法使框架可见。

  10. Frame的构造方法

  11. Frame的成员方法

  12. 对话框(dialog) • 对话框(dialog)也是一种可移动的窗口,它比框架简单,没有太多的控制元素,如最大化按钮、状态栏等。 • 对话框不能作为应用程序的主窗口,它依赖于一个框架窗口而存在,当框架窗口关闭时,对话框也关闭。 • 对话框类Dialog的构造方法必须声明对话框所依赖的框架窗口。

  13. 例--创建窗口 import java.awt.*; class FrmApp { static Frame fra=new Frame("FrmApp"); public static void main(String args[]) { fra.setSize(250,150); fra.setLocation(100,200); fra.setVisible(true); System.out.println("State:"+fra.getState()); System.out.println("Title:"+fra.getTitle()); System.out.println("Visible:"+fra.isVisible()); } }

  14. 程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息: State:0 Title:FrmApp Visible:true

  15. 5.标签 标签类(Label)组件用于显示一行文本信息。标签只能显示信息,不能用于输入。

  16. Label的构造方法

  17. Label的成员方法

  18. 例--在窗口中建立1个标签 import java.awt.*; class LabApp { public static void main(String args[]) { Frame fra=new Frame("LabApp"); Label lab=new Label(); //创建1个空标签 fra.setSize(250,150); lab.setText("This is a label"); //为标签添加标题 lab.setAlignment(Label.CENTER); lab.setBackground(Color.white); //引用Component类的方法设置标签背景颜色

  19. lab.setForeground(Color.black); //引用Component类的方法设置标签标题颜色 Font fnt=new Font("Serief", Font.ITALIC+Font.BOLD,22); lab.setFont(fnt); fra.add(lab); fra.setVisible(true); } }

  20. 程序运行时,出现如图所示的窗口。

  21. 6.按钮 按钮是最常见的一种组件,用来控制程序运行的方向。用户单击按钮时,计算机将执行一系列命令,完成一定的功能。 按钮通过java.awt包的Button类创建。

  22. Button的构造方法

  23. java.awt.Button的方法

  24. 例--在窗口中建立一个按钮 import java.awt.*; class Buttapp { public static void main(String args[]) { Frame fra=new Frame("ButtApp"); fra.setSize(250,170); fra.setLayout(null); //关闭页面设置 Button butt=new Button("click"); butt.setSize(100,50); butt.setLocation(75,60); fra.add(butt); fra.setVisible(true); } }

  25. 程序运行时,出现如图所示的窗口。

  26. 7.文本编辑组件 文本编辑组件有文本行和文本区。 文本行是一个单行文本编辑框,用于输入一行文字。文本行由java.awt包中的TextField类来创建。

  27. TextField的构造方法

  28. TextField的成员方法

  29. 例--创建文本行 import java.awt.*; class TextApp { public static void main(String args[]) { Frame fra=new Frame("文本框程序"); TextField txt1=new TextField(50); TextField txt2=new TextField("Text Field", 50); fra.setBounds(0,0,300,200); fra.setLayout(null); txt1.setBounds(50,50,130,20); //设置文本框的大小 txt2.setBounds(50,100,130,30); fra.add(txt1); fra.add(txt2); fra.setVisible(true); } }

  30. 程序运行时,出现如图所示的窗口。

  31. 11.2 布局管理 Java提供了多种风格和特点的布局管理器,每一种布局管理器指定一种组件相对位置和大小布局。布局管理器是容器类所具有的特性,每种容器都有一种默认的布局管理器。

  32. 11.2 布局管理 在java.awt包中共提供了5个布局管理器类: • FlowLayout • BorderLayout • CardLayout • GridLayout • GridBagLayout 每个类都是java.lang.Object类的子类。

  33. 11.2.1 BorderLayout类 BorderLayout(边布局)的布局策略是把容器内的空间划分为东、西、南、北、中5个区域,这5个区域分别用英文的East、West、South、North、Center表示。向容器中加入每个组件都要指明它放在容器的哪个区域。如果某个区域没有分配组件,则其他组件可以占据它的空间。

  34. BorderLayout类的构造方法

  35. 例--应用BorderLayout布局 在窗口中加入5个按钮,采用BorderLayout布局。 import java.awt.*; class BorLay { public static void main(String args[]) { Frame frm=new Frame("BorderLayout"); BorderLayout layout=new BorderLayout(5,7); frm.setBounds(0,0,300,200); frm.setLayout(layout); Button butN,butS,butW,butE,butC; butN=new Button("north button"); butS=new Button("south button");

  36. butW=new Button("west button"); butE=new Button("east button"); butC=new Button("center button"); frm.add(butN, BorderLayout.NORTH); frm.add(butS, BorderLayout.SOUTH); frm.add(butW, BorderLayout.WEST); frm.add(butE, BorderLayout.EAST); frm.add(butC, BorderLayout.CENTER); frm.setVisible(true); } }

  37. 程序运行结果如图所示。

  38. 11.2.2 FlowLayout FlowLayout(流式布局)的布局策略提供按行布局组件方式,将组件按照加入的先后顺序从左向右排列,当一行排满之后转到下一行继续按照从左向右的顺序排列。组件保持自己的尺寸,一行能容纳的组件的数目随容器的宽度变化。

  39. FlowLayout类的构造方法

  40. 例--使用FlowLayout布局 import java.awt.*; import javax.swing.*; public class FlowLay { public static void main(String args[]) { Frame frm=new Frame("BorderLayout"); FlowLayout layout=new FlowLayout(); frm.setBounds(0,0,200,200); frm.setLayout(layout); Button but1,but2; TextField txt1,txt2; but1=new Button("button 1"); but2=new Button("button 2"); txt1=new TextField("text 1",10); txt2=new TextField("text 2",10);

  41. frm.add(but1); frm.add(but2); frm.add(txt1); frm.add(txt2); frm.setVisible(true); } }

  42. 运行程序出现如图所示的界面: 初始界面 增大窗口宽度后的界面

  43. 11.2.3 GridLayout GridLayout(网格布局)管理器将容器划分为大小相等的若干行乘若干列的网格,组件按照从左到右、从上到下的的顺序依此放入各网格中。每个组件占满1格。组件大小随网格大小变化。如果组件数比网格数多,系统将自动增加网格数;如果组件数比网格数少,未用的网格区空闲。

  44. GridLayout类的构造方法

  45. 例--使用GridLayout布局 import java.awt.*; public class GridLay { public static void main(String args[]) { Frame frm=new Frame("GridLayout"); GridLayout layout=new GridLayout(2,2); //定义2行2列的GridLayout frm.setBounds(0,0,200,200); frm.setLayout(layout); String names[]={ "butt1","butt2","butt3","butt4"};

  46. for(int i=0; i<names.length; i++) { frm.add( new Button(names[i])); } frm.setVisible(true); } }

  47. 运行程序出现如图所示的界面。

  48. 11.3 事件处理 11.3.1 委托事件模型 JDK1.1之后采用委托事件模型 (delegation event model)。

  49. 1.事件 事件(event)是指一个状态的改变,或者一个动作的发生。例如,单击一个按钮,将产生单击事件;单击窗口关闭按钮,产生窗口关闭事件。

  50. 2.事件类 在Java中,用不同的类处理不同的事件。在java.awt.event包中定义了许多事件类,如单击事件类(ActionEvent)和窗口事件类(WindowEvent)。