JAVA程序设计 天津工程职业技术学院计算机工程系软件技术教研室
第十章 Java图形用户界面设计 教学目标: 掌握GUI程序设计概念和方法;理解Java的布局管理器机制和使用;能独立开发GUI应用程序,熟练使用各种组件。 教学重点: 布局管理器的使用;awt组件;事件处理;java绘图。 教学难点: 布局管理器的使用;事件委托机制。
10.1 GUI概述 一、GUI界面 用户与程序之间交互的一个控制面板,其内包含有菜单、控件(或组件)和容器并能响应用户的事件。 二、Java提供了丰富的图形类库来开发GUI程序。 到目前为止Java中有两套实现图形界面的机制,早期版本中的AWT(Abstract Window ToolKit,抽象窗口工具集)和现在常用的Swing。 1. AWT是Java中支持图形用户界面GUI设计的一个工具集,可以用于生产平台无关的GUI程序。其主要由C语言开发,属于重量级的Java组件。 2. Swing是围绕着实现AWT各个部分的API构筑的。Swing组件包括了AWT中已经提供的GUI,同时也包括一套高层次的GUI组件。其主要由纯Java代码实现,属于轻量级的Java组件。Swing继续使用AWT的事件处理模型。
10.2 AWT概述 一、awt简介: 在java1.0和java1.1中,使用的GUI库是AWT,其设计目标是让程序员构建一个通用的GUI,使其在所有平台上都能正常显示。 采用AWT(抽象窗口工具集)从而可使GUI适用于不同OS的环境。 二、AWT特点: 1. 其具体实现由目标平台下的OS来解释,从而导致JavaGUI在不同平台下会出现不同的运行效果。 2. 组件在设计时不应采用绝对定位,而应采用布局管理器来实现相对定位,以达到与平台及设备无关。 3. AWT组件及事件响应不及微软的SDK丰富(因为有些OS平台无微软的Windows组件),Sun在Java2中新增了Swing GUI组件。
三、AWT中的各个组件类
四、Java Swing 组件技术简介 1. Swing 特性: 2. AWT的缺点: 组件少而且是本地代码实现。 1)是AWT的扩展,它比AWT提供了更多的组件和外观 2)是Sun公司的新一代的图形界面的标准。 3)Swing组件的实现不包括任何于平台相关的代码 4)它是纯Java代码(但Jframe、JDialog、JApplet除外),因此与平台无关。 2. AWT的缺点: 组件少而且是本地代码实现。 3. Swing和AWT相比,一个重要改进在于Swing把一个组件的处理分为图形部分和数据部分。 1)其中图形部分由编程环境统一处理(V) 2) 数据部分由一个数据处理模型进行处理(M)。
4. 几点说明: 1)是AWT的扩展,它比AWT提供了更多的组件和外观。 2)Swing组件所在的包: javax.swing每个组件都以“J” 开头,各个组件都是Component的子类。 3)Swing中的各个组件的事件编程、容器的布局方式仍然与AWT中对应的编程一致,没有改变。
5. Swing编程所应该注意的问题 1)由于Swing中的各个组件类与AWT的组件类有相同的基类,所以可以在同一界面中同时使用Swing与AWT。但有时可能不能正常显示,最好不要合用。 2)正确理解重量组件与轻量组件的不同 轻量组件—Swing组件,由纯Java代码实现,占用系统资源少。 重量组件--AWT组件,由本地C代码实现,占用系统资源多。另外JFrame、JDialog、JApplet也是重量组件。
6. Swing组件的分类 顶级容器 JFrame、JApplet、JDialog 普通功能的容器 特殊功能的容器 基本组件 不可编辑信息显示组件 可编辑格式化信息显示组件 JButton、JCombobox、JList、JMenu、JSlider、JTextField等 JLabel、JProgressBar、JToolTip等 JColorChooser、JFileChooser、Jtabel、JTextArea、JTree等 JPanel、JScrollPanel、JToolbar JSplitPanel、JTabbedPanel、 JLayeredPanel、 JRootPane InternalFrame、
10.3 容器和版面配置 2.容器组件其中最常用的方法是: 一、容器组件: 1.容器组件(从Container类派生):包含其它基本组件或子容器的组件,并由布局管理器统一决定其内的各个组件的摆放位置和大小。 主要有: Panel(为组件提供空间 )和 Applet是无边框的容器组件。 ScrollPane是具有边框且带有滚动条的容器组件 Window、Frame、Dialog、FileDialog等都是有边框的容器组件并且可以移动、放大、缩小、关闭等。 2.容器组件其中最常用的方法是: add()---添加其它组件 setLayout()---设置容器组件内的各个组件的摆放方式(它们的具体用法请参见本章的11.4节的介绍)。容器的主要作用是实现图形界面和组织其它组件。
3.容器组件的创建 1)在init()或Frame的构造函数中内,首先创建出容器组件对象并实例化它,然后设置布局方式。 2)分别创建出在容器内待包含的各个基本组件并实例化它们。 3)调用容器的add( )函数将各个基本组件加入到容器内。 4)再调用add( )将各个子容器加入到Applet中或Frame的主窗框中;然后注册各个基本组件和容器的事件监听器对象。 5)对Frame容器则需要调用setVisible(true)调显示出其内的各个组件,而对Dialog容器则需要调用show()显示出其内的各个组件。 示例:容器组件panel示例
二、Frame容器 1.创建框架Frame类对象: 1)格式: public Frame([String title]) 框架是带有标题和边界的顶层窗口。框架的缺省布局是 BorderLayout 2)常用方法: public void setSize(int width,int height) //设置宽和高 public void setVisible(boolean v) //设置窗口是否可见 public void setResizable(boolean b)//是否可调大小 public void setIconImage(Image m)//设置窗口图标 public void setBounds(int x,int y,int w,int h) public void pack()//以紧凑方式显示 public void setMenuBar(MenuBar m)//设置菜单
3)关闭窗口 给窗口增加事件监听器addWindowListener(this) 用如下方法关闭窗口: dispose(); System.exit(0); 2、示例: 窗口示例
三、容器组件的布局设计 1.布局: 它决定容器内的各个组件的摆放状态(组件大小及相对位置等),主要由布局管理器来控制 2.优点: 有次序地摆放组件、当窗口变化时会自动更新版面并调整窗口的大小。 3.要点: GUI它在布局管理上采用了容器和布局管理分离的方案。也就是说,容器只管将其他组件放入其中,而不管这些组件是如何放置的。对于布局的管理交给专门的布局管理器类(LayoutManager)来完成。
Flowlayout(从上到下,从左到右依次摆放,每行均居中,它是Panel、Applet的缺省布局); 4. Java中布局种类: Flowlayout(从上到下,从左到右依次摆放,每行均居中,它是Panel、Applet的缺省布局); BorderLayout(将容器内的空间划分为东、南、西、北、中五个方位,并指明组件所在的方位,它是Window、Dialog、Frame的缺省布局方式); CardLayout(卡片叠式布局):将组件象卡片一样放置在容器中,在某一时刻只有一个组件可见 GridLayout(行列网格状布局);形似一个无框线的表格,每个单元格中放一个组件 NULL布局:用setLayout(null)可以不使用布局,此时可以对组件进行绝对定位。 Public void setBounds(int x,int y,int w,int h)
1)FlowLayout布局策略 Flowlayout:从上到下,从左到右依次摆放,每行均居中,它是Panel、Applet的缺省布局; 示例:Flowlayout布局示例
2)BorderLayout布局策略 BorderLayout:将容器内的空间划分为东、南、西、北、中五个方位,并指明组件所在的方位,它是Window、Dialog、Frame的缺省布局方式; 示例:Borderlayout布局策略示例
3)CardLayout布局策略
4)GridLayout布局策略
5. 指定布局方式 创建指定布局方式类的对象,然后调用容器类的setLayout()方法来指定所需的布局方式。如: setLayout(new FlowLayout()); 要点: Java中不希望采用绝对定位布局而采用相对定位布局,如需要使用绝对定位布局,则应该取消容器的布局方式setLayout(null)),然后使用 setLocation() setSize() setBounds()设置组件的大小及位置。
课堂小结 理解awt的基本概念以及在JavaGUI程序设计中的重要位置。 理解容器的概念。 理解全新的布局管理器概念,掌握如何利用布局管理器来进行基本的版面设计。