第八章建立Gu|s 本模块讲述图形用户界面的建立及布局。它介绍了抽象视窗工具包,一种建立GUIs的类包, Exception Handling 粪 poets Communications 第一节相关问题 讨论一下述问题与本模块中出现的材料相关 Java编程语言是一个具有独立平台的编程语言。GUI环境通常是从属平台。那么,为了使GUI平台独立,Java 技术是如何接近这个主题的呢? 第二节目的 完成本模块学习时,将能 描述AWT包及其组件 定义 Container、 Component及 Layout manager等术语,以及它们是如何在一起来建立GUI的 使用 Layout Manager 使用Flow、 Border、Gird及Card布局管理器来获得期望的动态布局 增加组件到 Container 正确运用 Frame及 Panel容器 描述如何使用嵌套容器来完成复杂的布局 在Java软件程序中,确认如下内容 容器 相关布局管理器 所有组件的布局层次
第八章 建立 GUIs 本模块讲述图形用户界面的建立及布局。它介绍了抽象视窗工具包,一种建立 GUIs 的类包。 第一节 相关问题 讨论—下述问题与本模块中出现的材料相关。 - Java 编程语言是一个具有独立平台的编程语言。GUI 环境通常是从属平台。那么,为了使 GUI 平台独立,Java 技术是如何接近这个主题的呢? 第二节 目 的 完成本模块学习时,将能: - 描述 AWT 包及其组件 - 定义 Container、Component 及 Layout Manager 等术语,以及它们是如何在一起来建立 GUI 的 - 使用 Layout Manager - 使用 Flow、Border、Gird 及 Card 布局管理器来获得期望的动态布局 - 增加组件到 Container - 正确运用 Frame 及 Panel 容器 - 描述如何使用嵌套容器来完成复杂的布局 - 在 Java 软件程序中,确认如下内容: - 容器 - 相关布局管理器 - 所有组件的布局层次
第三节AWT 提供基本的GUI组件,用在所有的 Java applets及应用程序中 具有可以扩展的超类,它们的属性是继承的,类也可被抽象化 确保显示在屏幕上的每个GUI组件都是抽象类组件的子类 Contaner,它是一个 Component的抽象子类,而且包括两个子类 Panel window AⅥT提供用于所有 Java applets及应用程序中的基本GUI组件,还为应用程序提供与机器的界面。这将保证一台计 算机上出现的东西与另一台上的相一致 在学AWT之前,简单回顾一下对象层次。记住,超类是可以扩展的,它们的属性是可继承的。而且,类可以被抽象化, 这就是说,它们是可被分成子类的模板,子类用于类的具体实现。 显示在屏幕上的每个GUI组件都是抽象类组件的子类。也就是说,每个从组件类扩展来的图形对象都与允许它们运行 的大量方法和实例变量共享。 Container是 Component的一个抽象子类,它允许其它的组件被嵌套在里面。这些组件也可以是允许其它组件被嵌套 在里面的容器,于是就创建了一个完整的层次结构。在屏幕上布置GUI组件,容器是很有用的。Pane是 Container的最 简单的类。 Container的另一个子类是 Window 第四节 Java. awt包 Java.awt包包含生成 WIDGETS和GUI组件的类。该包的基本情况如下图所示。黑体字的类表明该模块的要点。 jawa. lang Object Border Layout Checkbox Group Dimension Grid Bag Constraints Grid Bag Layout Rectangle MenuBar MeruItem - Menu-Popup Menu CheckbooeMenul tem Applet (java applet package Label 、」 Dialog-·-F11eDia1og Textcomponent-·1 TextArea Text Field Exceptions- AWTExceptian Errors AWTErr 第五节建立图形用户界面
105 第三节 AWT AWT - 提供基本的 GUI 组件,用在所有的 Java applets 及应用程序中 - 具有可以扩展的超类,它们的属性是继承的,类也可被抽象化 - 确保显示在屏幕上的每个 GUI 组件都是抽象类组件的子类 - Contaner,它是一个 Component 的抽象子类,而且包括两个子类 - Panel - window AWT 提供用于所有 Java applets 及应用程序中的基本 GUI 组件,还为应用程序提供与机器的界面。这将保证一台计 算机上出现的东西与另一台上的相一致。 在学 AWT 之前,简单回顾一下对象层次。记住,超类是可以扩展的,它们的属性是可继承的。而且,类可以被抽象化, 这就是说,它们是可被分成子类的模板,子类用于类的具体实现。 显示在屏幕上的每个 GUI 组件都是抽象类组件的子类。也就是说,每个从组件类扩展来的图形对象都与允许它们运行 的大量方法和实例变量共享。 Container 是 Component 的一个抽象子类,它允许其它的组件被嵌套在里面。这些组件也可以是允许其它组件被嵌套 在里面的容器,于是就创建了一个完整的层次结构。在屏幕上布置 GUI 组件,容器是很有用的。Panel 是 Container 的最 简单的类。Container 的另一个子类是 Window。 第四节 Java.awt 包 Java.awt 包包含生成 WIDGETS 和 GUI 组件的类。该包的基本情况如下图所示。黑体字的类表明该模块的要点。 第五节 建立图形用户界面
8.5.1 Container Container Container的两个主要类型是 Window和 Panel Window是Java.awt. Window.的对象 Panel是Java.awt.Pane的对象 Container有两个主要类型: Window和 Panel Window是Java.awt. Window.的对象。 Window是显示屏上独立的本机窗口,它独立于其它容器。 Window有两种形式: Frame(框架)和 Dialog(对话框)。 Frame和 Dialog是 Window的子类。 Frame是一个带有标题 和缩放角的窗口。对话没有菜单条。尽管它能移动,但它不能缩放 Panel是Java.awt. Panel的对象。 Panel包含在另一个容器中,或是在Web浏览器的窗口中。 Panel确定一个四边形, 其它组件可以放入其中。 Panel必须放在 Window之中(或 Window的子类中)以便能显示出来 注一容器不但能容纳组件,还能容纳其它容器,这一事实对于建立复杂的布局是关键的,也是基本的。 滚动块也是 Window的一个子类。它在模块10“AWT组件集”里讨论。 85.2定位组件 定位组件 容器里的组件的位置和大小是由布局管理器决定的。 可以通过停用布局管理器来控制组件的大小或位置 后必须用组件上的 setlocation0, setsize0,或 setBounds0来定位它们在容器里的位置 容器里的组件的位置和大小是由布局管理器决定的。容器对布局管理器的特定实例保持一个引用。当容器需要定位 个组件时,它将调用布局管理器来做。当决定一个组件的大小时,同样如此。布局管理器完全控制容器内的所有组件。它 负责计算并定义上下文中对象在实际屏幕中所需的大小。 853组件大小 因为布局管理器负责容器里的组件的位置和大小,因此不需要总是自己去设定组件的大小或位置。如果想这样做(使 用 setlocationo, sets ize()或 setBoundso方法中的任何一种),布局管理器将覆盖你的决定 如果必须控制组件的大小或位置,而使用标准布局管理器做不到,那就可能通过将下述方法调用发送到容器中来中止 布局管理器 做完这一步,必须对所有的组件使用 setlocationo,sets ize)或 setboundso,来将它们定位在容器中。请注意,由于窗 口系统和字体大小之间的不同,这种办法将导致从属于平台的布局。更好的途径是创建布局管理器的新子类 第六节 Frames 是 Window的子类 具有标题和缩放角 从组件继承并以add方式添加组件 能以字符串规定的标题来创建不可见框架对象
106 8.5.1 Container Container - Container 的两个主要类型是 Window 和 Panel - Window 是 Java.awt.Window.的对象 - Panel 是 Java.awt.Panel 的对象 Container 有两个主要类型:Window 和 Panel Window 是 Java.awt.Window.的对象。Window 是显示屏上独立的本机窗口,它独立于其它容器。 Window 有两种形式:Frame(框架)和 Dialog(对话框)。Frame 和 Dialog 是 Window 的子类。Frame 是一个带有标题 和缩放角的窗口。对话没有菜单条。尽管它能移动,但它不能缩放。 Panel 是 Java.awt.Panel 的对象。Panel 包含在另一个容器中,或是在 Web 浏览器的窗口中。Panel 确定一个四边形, 其它组件可以放入其中。Panel 必须放在 Window 之中(或 Window 的子类中)以便能显示出来。 注—容器不但能容纳组件,还能容纳其它容器,这一事实对于建立复杂的布局是关键的,也是基本的。 滚动块也是 Window 的一个子类。它在模块 10“AWT 组件集”里讨论。 8.5.2 定位组件 定位组件 - 容器里的组件的位置和大小是由布局管理器决定的。 - 可以通过停用布局管理器来控制组件的大小或位置。 然后必须用组件上的 setLocation(),setSize(),或 setBounds()来定位它们在容器里的位置。 容器里的组件的位置和大小是由布局管理器决定的。容器对布局管理器的特定实例保持一个引用。当容器需要定位一 个组件时,它将调用布局管理器来做。当决定一个组件的大小时,同样如此。布局管理器完全控制容器内的所有组件。它 负责计算并定义上下文中对象在实际屏幕中所需的大小。 8.5.3 组件大小 因为布局管理器负责容器里的组件的位置和大小,因此不需要总是自己去设定组件的大小或位置。如果想这样做(使 用 setLocation(),setSize()或 setBounds()方法中的任何一种),布局管理器将覆盖你的决定。 如果必须控制组件的大小或位置,而使用标准布局管理器做不到,那就可能通过将下述方法调用发送到容器中来中止 布局管理器: setLayout(null); 做完这一步,必须对所有的组件使用 setLocation(),setSize()或 setBounds(),来将它们定位在容器中。请注意,由于窗 口系统和字体大小之间的不同,这种办法将导致从属于平台的布局。更好的途径是创建布局管理器的新子类。 第六节 Frames Frames - 是 Window 的子类 - 具有标题和缩放角 - 从组件继承并以 add 方式添加组件 - 能以字符串规定的标题来创建不可见框架对象
将 Border layout当做缺省布局管理器 ut方式来改变缺省布局管理器 Frames是 Window的一个子类。它是带有标题和缩放角的窗口。它继承于 Java. awt Container,因此,可以用addO方 式来给框架添加组件。框架的缺省布局管理器就是 Border Layout。它可以用 setlayoutl方式来改变 框架类中的构造程序 Frame(string)用由 String规定的标题来创建一个新的不可见的框架对象。当它还处于不可见状 态时,将所有组件添加到框架中 1. import java. awt. *i 2. public class My Er ame extends Frame t 3. public static void main (String args [] MyFrame fr new My Frame("Hello Out There ! )i fr setsize(500, 500); 4. fr setBackground( Color blue )i fr setvisible(true)i public My Frame (String str) t 上述程序创建了下述框架,它有一个具体的标题、大小及背景颜色 Hello out Therc! 注一在框架显示在屏幕上之前,必须做成可见的(通过调用程序 setvisible(true)),而且其大小是确定的(通过 调用程序 setsize0或pack0)。 第七节 Panels Panels 为组件提供空间 -允许子面板拥有自己的布局管理器 象 frames一样, Panels提供空间来连接任何GUI组件,包括其它面板。每个面板都可以有它自己的布管理程序。 一旦一个面板对象被创建,为了能看得见,它必须添加到窗口或框架对象上。用 Container类中的adO方式可以做到这
107 - 能将 Border Layout 当做缺省布局管理器 - 用 setLayout 方式来改变缺省布局管理器 Frames 是 Window 的一个子类。它是带有标题和缩放角的窗口。它继承于 Java.awt.Container,因此,可以用 add()方 式来给框架添加组件。框架的缺省布局管理器就是 Border Layout。它可以用 setLayout()方式来改变。 框架类中的构造程序 Frame(String)用由 String 规定的标题来创建一个新的不可见的框架对象。当它还处于不可见状 态时,将所有组件添加到框架中。 1. import java.awt.*; 2. public class MyFrame extends Frame { 3. public static void main (String args[]) { 6. MyFrame fr = new MyFrame("Hello Out There!"); 7. fr.setSize(500,500); 4. fr.setBackground(Color.blue); 5. fr.setVisible(true); 6. } 7. public MyFrame (String str) { 8. super(str); 9. } 10. } 上述程序创建了下述框架,它有一个具体的标题、大小及背景颜色。 注—在框架显示在屏幕上之前,必须做成可见的(通过调用程序 setVisible(true)),而且其大小是确定的(通过 调用程序 setSize()或 pack())。 第七节 Panels Panels - 为组件提供空间 - 允许子面板拥有自己的布局管理器 - 以 add 方法添加组件 象 Frames 一样,Panels 提供空间来连接任何 GUI 组件,包括其它面板。每个面板都可以有它自己的布管理程序。 一旦一个面板对象被创建,为了能看得见,它必须添加到窗口或框架对象上。用 Container 类中的 add()方式可以做到这 一点
下面的程序创建了一个小的黄色面板,并将它加到一个框架对象上 1. import java. awt. *i 2. public class FrameWith Panel extends Frame t / Cons truc public Frame With anel (String str) i super (str)i 67891111 public static void main (String args [])i FramewithPanel fr new FrameWithPanel (Frame with Panel") Panel pan new Panel()i fr setsize(200, 200)i fr setBackground Color blue) fr. setLayout (null);//override default la yout mgr pan setsize (100, 100)i pan setBackground( Color yellow) fr. add(pan)i fr setvisible(true)i xd Frame with Panel 第八节容器布局( Container Layout 容器布局( Container Layout)
108 下面的程序创建了一个小的黄色面板,并将它加到一个框架对象上: 1. import java.awt.*; 2. public class FrameWithPanel extends Frame { 3. 4. // Constructor 5. public FrameWithPanel (String str) { 6. super (str); 7. } 8. 9. public static void main (String args[]) { 10. FrameWithPanel fr = 11. new FrameWithPanel ("Frame with Panel"); 12. Panel pan = new Panel(); 13. 14. fr.setSize(200,200); 15. fr.setBackground(Color.blue); 16. fr.setLayout(null); //override default layout mgr 17. pan.setSize (100,100); 18. pan.setBackground(Color.yellow); 19. 20. fr.add(pan); 21. fr.setVisible(true); 22. } 23. .... 24. 第八节 容器布局(Container Layout) 容器布局(Container Layout) - 流程布局(Flow Layout)