Java程序设计技术第七章(第二版)

上传人:豆浆 文档编号:26058261 上传时间:2017-12-22 格式:PPT 页数:53 大小:1.59MB
返回 下载 相关 举报
Java程序设计技术第七章(第二版)_第1页
第1页 / 共53页
Java程序设计技术第七章(第二版)_第2页
第2页 / 共53页
Java程序设计技术第七章(第二版)_第3页
第3页 / 共53页
Java程序设计技术第七章(第二版)_第4页
第4页 / 共53页
Java程序设计技术第七章(第二版)_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《Java程序设计技术第七章(第二版)》由会员分享,可在线阅读,更多相关《Java程序设计技术第七章(第二版)(53页珍藏版)》请在金锄头文库上搜索。

1、第七章 Java的图形用户界面设计,AWT与Swing,AWT Java抽象窗口工具集(Abstract Window Toolkit,简称AWT)Swing Swing属于JavaTM Foundation Classes(简称JFC)的一部分,JFC包含了一组帮助程序员创建图形用户界面的功能。AWT功能有限,因此在后来的JDK版本中,又提供了功能更强的Swing,AWT类与继承关系,Component,Container,Panel,Applet,Window,Frame,Dialog,Button,TextField,TextArea,TextComponent,Checkbox,Men

2、uComponent,Menu,MenuItem,MenuBar,其他组件,独立,不独立,SWING中主要类的继承关系,Swing与AWT不同,Swing组件在实现时不包含任何本地(native)代码 Swing组件可以不受硬件平台的限制,而具有更多的功能 Swing被称为“轻量级(lightweight)”组件,AWT称为“重量级(heavyweight)”组件 “重量级”组件与“轻量级”组件一同使用时,如果组件区域有重叠,则“重量级”组件总是显示在上面 Swing组件的是具有状态(state)的组件,容器,Java的图形用户界面由组件构成,例如按钮(button)、文本输入框(textfi

3、eld)、标签(label)等都是组件,其中有一类特殊的组件称为容器(container),例如框架(frame)、面板(panel)等。容器是组件的容器,各种组件(包括容器)可以通过add()方法添加到容器中,顶层容器,顶层(Top level)容器所有组件都必须包含在某个容器中,而有些容器是可以嵌套的,在这个嵌套层次的最外层,必须是一个顶层(Top level)容器四种顶层容器JFrame、JApplet、JDialog和JwindowJFrame是一个带有标题行和控制按钮(最小化、恢复/最大化、关闭)的独立窗口,创建应用程序时需要使用JFrame。创建小应用程序时使用JApplet,它被

4、包含在浏览器窗口中。创建对话框时使用JDialog。JWindow是一个不带有标题行和控制按钮的窗口,因此通常很少使用,JFrame创建应用程序,程序7-1,内容窗格,顶层容器都有一个内容窗格(Content Pane)顶层容器中除菜单之外的组件都是放在这个内容窗格中,将组件放入内容窗格,通过顶层容器的getContentPane()方法获得其缺省的内容窗格,然后将组件添加到内容窗格中,Container contentPane = frame.getContentPane(); contentPane.add(button, BorderLayout.CENTER); frame.getCo

5、ntentPane().add(button, BorderLayout.CENTER);,将组件放入内容窗格,创建一个新的内容窗格取代顶层容器缺省的内容窗格。创建一个JPanel的实例,然后将组件添加到JPanel实例中,再通过顶层容器的setContentPane()方法将JPanel实例设置为新的内容窗格(程序7-2),JPanel contentPane = new JPanel();contentPane.setLayout(new BorderLayout();contentPane.add(button, BorderLayout.CENTER); frame.setConten

6、tPane(contentPane);,注意,向顶层容器的内容窗格添加组件时,可以直接调用顶层容器的add()方法,这与调用内容窗格的add()方法是等价的(从J2SE 1.5开始 )顶层容器缺省内容窗格的布局管理器是BorderLayout,而JPanel缺省的布局管理器是FlowLayout,因此可能需要为JPanel实例设置一个BorderLayout布局管理器,面板(JPanel),面板(JPanel)是一种用途广泛的容器与顶层容器不同的是,面板不能独立存在,必须被添加到其他容器内部面板可以嵌套,由此可以设计出复杂的图形用户界面,程序7-3,创建一个黄色面板,通过add()方法在面板中

7、添加了一个按钮,然后将该面板添加到一个JFrame的实例中,JFrame实例的背景被设置为蓝绿色,import java.awt.*;import javax.swing.*;public class FrameWithPanel public static void main(String args) JFrame frame = new JFrame(Frame with Panel);Container contentPane = frame.getContentPane();contentPane.setBackground(Color.CYAN);JPanel panel = new

8、 JPanel();panel.setBackground(Color.yellow);JButton button = new JButton(Press me);panel.add(button);contentPane.add(panel, BorderLayout.SOUTH); frame.setSize(300,200);frame.setVisible(true);,布局,组件的布局,包括位置和大小,通常由布局管理器(Layout Manager)负责安排每个容器都有一个缺省的布局管理器通过容器的setLayout()方法改变容器的布局管理器多种布局管理器java.awt.Flo

9、wLayout、java.awt.BorderLayout、java.awt.GridLayout、java.awt.GridBagLayout、java.awt.CardLayout、javax.swing.BoxLayout和javax.swing.SpringLayout,程序7-4,import java.awt.*;import javax.swing.*;public class ExGui private JFrame frame;private JButton b1;private JButton b2;public static void main(String args)E

10、xGui that = new ExGui();that.go(); ,main()方法在这个例子中,main()方法有两个作用。首先,它创建了一个ExGui类的实例,在这个实例创建之前,并没有实际可用的b1和b2数据项。其次,当ExGui实例创建好以后,main()又调用了该实例的go()方法,在这个方法中,程序的实际功能得以实现。,程序7-4,public void go()frame = new JFrame (GUI example);/创建一个JFrame实例Container contentPane = frame.getContentPane(); /获取内容窗格/为内容窗格设置

11、FlowLayout布局管理器contentPane.setLayout(new FlowLayout();b1 = new JButton(Press me); /创建JButton实例b2 = new JButton(Dont press Me);contentPane.add(b1); /添加按钮contentPane.add(b2);frame.pack();frame.setVisible(true);,new JFrame(“GUI example”)这条语句的功能是创建JFrame类的一个实例。JFrame 是一个顶层级窗口,它带有标题框(标题由构造方法中的String型参数“G

12、UI example” 指定)并且可以改变大小。需要注意的是,在刚刚创建时,JFrame的大小为0,并且不可见。,frame.getContentPane()这条语句获取JFrame实例缺省的内容窗格,此后可以修改它的布局管理器,并添加组件。,contentPane.setLayout(new FlowLayout()这条语句创建了一个FlowLayout型的布局管理器,并通过调用setLayout()方法将该布局管理器指定给前面已经获得的JFrame实例的缺省内容窗格。,new JButton(“Press Me”)这条语句的功能是创建javax.swing.JButton类的一个实例,该实

13、例是窗口中的标准按钮(button),按钮上的标签由构造方法中String型参数“Press Me”指定。,frame.pack()这条语句通知框架frame设定一个适当的大小,以便能够以“紧缩”的形式包容各个组件。为了做到这一点,frame需要通知布局管理器,由布局管理器安排每个组件的大小和位置。,frame.setVisible(true)这条语句的功能是使得框架frame以及它所包含的组件对用户可见,在此之前,框架和组件虽然已经创建好了,但是并没有显示出来,只有调用了setVisible(true)方法后,它们才变为可见。,FlowLayout布局管理器,FlowLayout定义在jav

14、a.awt包中,Fl对容器中组件进行布局的方式是将组件逐个地安放在容器中的一行上,一行放满后就另起一个新行。在缺省情况下,将组件居中放置在容器的某一行上 FlowLayout布局管理器并不强行设定组件的大小,而是允许组件拥有它们自己所希望的尺寸 每个组件都有一个getPreferredSize()方法,布局管理器会调用这一方法取得每个组件希望的大小,FlowLayout构造方法,public FlowLayout() public FlowLayout(int align) public FlowLayout(int align, int hgap, int vgap)align对齐方式的可选

15、项, align的可取值有FlowLayout.LEFT、FlowLayout.RIGHT和FlowLayout.CENTER三种形式 hgap和vgap,可以设定组件的水平间距和垂直间距,程序7-5,程序7-5,BorderLayout布局管理器,BorderLayout是顶层容器中内容窗格的缺省布局管理器由BorderLayout管理的容器被划分成北(North)南(South)西(West)东(East)中(Center)五个区域,分别代表容器的上、下、左、右和中部,用常量BorderLayout.NORTH、BorderLayout.SOUTH、BorderLayout.WEST、Bo

16、rderLayout.EAST、BorderLayout.CENTER表示BorderLayout定义在java.awt包中,BorderLayout构造方法,BorderLayout() 构造一个各部分间间距为0的BorderLayout实例 BorderLayout(int, int) 构造一个各部分间具有指定间距的BorderLayout实例,组件加入,frame = new JFrame(“Frame Title”);button = new JButton(“Press Me”); frame.getContentPane().add(b, BorderLayout.SOUTH);,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号