《第6章 图形用户界面程序设计.ppt》由会员分享,可在线阅读,更多相关《第6章 图形用户界面程序设计.ppt(37页珍藏版)》请在优知文库上搜索。
1、第六章 图形用户界面程序设计 主要内容图形用户界面开发包:AWT 包及Swing包掌握创建GUI 程序的基本方法掌握使用布局管理器进行界面布局的基本方法掌握 Swing包中常用组件的基本用法掌握Java事件处理机制Java中开发图形用户界面的资源n界面元素:容器和组件qjava.awt包qjava.swing包n布局:q常用布局管理类:java.awtq新增布局管理类:java.swingn事件处理:q常用事件处理类或接口:java.awt.eventq新增事件处理类或接口:Java.swing.eventJava GUI组件nAWT(Abstract Window Toolkit):早期版本
2、。q包为:java.awtq其优点是:简单、系统开销小;但是它开发出来的应用程序移植性差,而且不如Windows自带的程序看起来精美。nSwing:Java1.2版本正式加入的新图形用户版本。q包为:javax.swingq优点是:不包含任何与平台有关的本地代码,基于swing的应用程序具有很好的可移植性;具有比AWT更为丰富的组件;组件的形式也可以多样化;使用MVC体系结构进行设计;AWT组件和swing组件的关系n几乎所有的AWT组件都有对应的swing组件,swing组件名前多一个字母“J”。nSwing对AWT组件进行了修改,且增加了新的组件。n本课程我们使用swing组件开发图形用户
3、界面。使用swing开发GUI所需的资源n开发图形用户界面程序通常需导入:qimport javax.swing.*;qimport java.awt.*;qimport java.awt.event.*;Gui程序框架nimport javax.swing.*;/引入GUI包npublic class MyFirstGUI extends JFrame npublic MyFirstGUI()nsuper(我的第一个窗口程序);/调用父类Jframe的构造器方法nnpublic static void main(String args)nMyFirstGUI w1=new MyFirstGU
4、I();nw1.setSize(300,150);/设置窗口大小nw1.setVisible(true);/显示窗口nn认识Java GUI程序n 调试运行例题6-1JFrame类支持图形用户界面的设类支持图形用户界面的设计与实现计与实现,通常我们编写的通常我们编写的GUI应用应用程序都要继承程序都要继承JFrame类类.JFrame类位于类位于javax.swing包包.java.swing包是包是Java平台上平台上JFC(Java Foundation Classws)的)的一部分,它提供开发一部分,它提供开发GUI所需要的所所需要的所有组件。有组件。向JFrame中添加组件步骤n1.创
5、建组件对象q如:JLabel jL1=new JLabel(欢迎光临);n2.获得添加的目标容器qContainer w1Container=w1.getContentPane();n3.将组件添加到容器中qw1Container.add(jL1);进一步认识Java GUI程序n调试运行例题6-2 JLabel,标签组件标签组件,用来在窗口中显示信息用来在窗口中显示信息.getContentPane()是是JFram的方法的方法,用来获取用来获取当前对象的窗口容器当前对象的窗口容器(Container).所有在窗口所有在窗口中显示的组件都要加入到这个容器中中显示的组件都要加入到这个容器中.通
6、常情况通常情况下下,用用add方法将组件加入方法将组件加入.Container类位于类位于java.awt包包.抽象窗口工具包抽象窗口工具包AWT(Abstract Window Toolkit)是是 API为为Java 程序提供的建立图形用户界面程序提供的建立图形用户界面GUI 工具集,工具集,AWT可用于可用于Java的的applet和和applications中。中。问题思考如果在一个窗口里显示多个标签,那么这些标签应该如何排列?Java的布局管理器n Java的布局管理器提供了几种不同的布局管理方式,用来控制组件在容器中的显示方式和显示位置.n所有的布局管理方式都是以类的形式实现的,这
7、些类位于java.awt包中.n常用的布局管理方式有下面几种:顺序布局:FlowLayout 边界布局:Borderlayout 网格布局:GridLayout 手工布局:设置布局管理器n每个容器拥有自己默认的布局管理器。ContentPane的默认布局是的默认布局是BorderLayout。n如果不希望使用默认布局,则可使用所有容器如果不希望使用默认布局,则可使用所有容器的父类的父类Container的的setLayout()方法改变。例方法改变。例如:如:JPanel pane=new JPanel();pane.setLayout(new BorderLayout()());组件布局方法
8、1.顺序布局顺序布局(FlowLayout):将组件按从左至右,:将组件按从左至右,从上到下的顺序逐个放置。从上到下的顺序逐个放置。2.边界布局边界布局(BorderLayout),把容器分为把容器分为5个区:北个区:北区、南区、东区、西区、中区。组件可以指定自区、南区、东区、西区、中区。组件可以指定自己放在那个区,因为只有己放在那个区,因为只有5个区,所以最多容纳个区,所以最多容纳5个组件。个组件。3.网格布局网格布局(GridLayout),把容器区域分成若干个把容器区域分成若干个网格,每个网格放置一个组件,适合数量众多的网格,每个网格放置一个组件,适合数量众多的组件。在创建网格布局时,可
9、以给出网格的行数组件。在创建网格布局时,可以给出网格的行数和列数。和列数。顺序布局管理 调试运行例题调试运行例题6-3 定义顺序布局管理对象 FlowLayout myLayout=new FlowLayout();设置容器的布局管理方式为顺序布局方式 winContainer.setLayout(myLayout);顺序布局(顺序布局(FlowLayout)是把组件是把组件一个接一个地从左到右顺序排列,一一个接一个地从左到右顺序排列,一行排满后就转到下一行继续排列,直行排满后就转到下一行继续排列,直到把所有组件都排列完毕为止。到把所有组件都排列完毕为止。在顺序布局方式中,组件通过容器的在顺序
10、布局方式中,组件通过容器的add(组件)(组件)方法来实现上述排列。方法来实现上述排列。边界布局 n 调试运行例题6-4 定义边界布局管理器对象 BorderLayout myLayout=new BorderLayout();设置容器的布局管理方式为边界布局方式 winContainer.setLayout(myLayout);将标签组件jL1放置在窗口东区 winContainer.add(East,jL1)或:winContainer.add(BorderLayout.EAST,jL1);边界布局(BorderLayout)是把容器分为5个区:北区(North)、南区(South)、东区
11、(East)、西区(West)和中区(Center)。这几个区的分布规律是“上北下南,左东右西中”。组件可以通过容器的add(区域,组件)的方法将其指定显示位置。由于只有5个区域,因此,边界布局最多只能放置5个组件。网格布局 n 调试运行例题6-5 定义网格布局管理器对象 GridLayout myLayout=new GridLayout(3,2);设置容器的布局管理方式为网格布局方式 winContainer.setLayout(myLayout);网格布局(GridLayout)将容器划分为m行,n列个网格,每个网格放置一个组件.组件通过容器的add(组件)方法将组件从左到右放置在对应的
12、网格中。手工布局 n 调试运行例题6-6 jL1.setBounds(x,y,width,height);设置标签组件jL1左上角坐标在窗口中位于 (x,y)处,组件jL1宽为width像素,高为heiht像素.窗口的原点位于窗口的左上角.X值越大,就越靠 近窗口的右边,y值越大,就越靠近窗口的下面.设置容器的布局管理方式为null布局方式 winContainer.setLayout(null);手工布局允许程序员对界面进行个性化的设计,即由程序员来安排组件在容器中的具体位置和大小.组件通过容器组件通过容器的的add(组件)(组件)方法加入。方法加入。手工布局n设置布局为手工布局q如:w1C
13、ontainer.setLayout(null);n设置组件显示的位置和大小q如1:jL1.setBounds(10,20,100,20);q如2:jL2.setBounds(20,40,100,20);小结Java GUI界面设计步骤:1.引入组件所在的包(如javax.swing.和java.awt)2.定义图形用户界面类,该类继承自JFrame3.将图形用户界面中需要的组件定义成成员变量4.添加构造器方法,在该构造器方法中,实现界面设计(1)调用父类JFrame构造器方法(2)将需要在当前窗口放置的组件进行初始化(3)通过this.getContentPane()获得当前窗口容器对象(4
14、)定义并设置当前容器的布局管理方式(5)将定义好的组件添加到当前窗口(6)将窗口设置为合适的大小(7)显示窗口5.生成窗口对象(通常在main方法中生成),你就可以看到相应的窗口了 练习1n编程实现如图所示的窗口,使用顺序布局方式练习2n编程实现如图所示的窗口,使用边界布局方式练习3n编程实现如图所示的窗口,使用网格布局方式事件处理nimport javax.swing.*;nimport java.awt.*;npublic class MyFirstEvent extends JFramenpublic MyFirstEvent()nsuper(事件处理机制);n npublic stat
15、ic void main(String args)nMyFirstEvent w1=new MyFirstEvent();nContainer w1Container=w1.getContentPane();nw1Container.setLayout(null);nJLabel jL1=new JLabel(欢迎访问,请点击下面的按钮);n jL1.setBounds(50,20,200,30);n w1Container.add(jL1);nJButton jB1=new JButton(被按下偶数次);njB1.setBounds(60,60,150,30);nw1Container.a
16、dd(jB1);nw1.setSize(300,150);nw1.setVisible(true);nn事件处理中的4要素n事件源:产生事件的组件n事件n事件监听器:负责监听事件的程序n事件服务程序:针对具体事件的处理代码事件处理机制添加事件处理步骤:n(1)为组件注册事件监听器:q如:addActionListener(this)n(2)编写事件监听器类,要求实现相关的事件监听器接口。并在事件监听器类中实现特定方法。n(3)并在事件监听器类中实现特定方法。n注:常用事件处理接口包含在java.awt.event包中,因此,程序必须引入该包。事件服务类的建立n事件服务类必须实心相应的事件监听器接口或继承适配器类。事件监听器接口事件监听器接口 适配器适配器Adapter类类 WindowListener WindowAdapter MouseMotionLister MouseMotionAdapter MouseListener MouseAdapter KeyListener KeyAdapter FocusListenerFocusAdapter ActionListener It