Java图形用户界面.ppt
《Java图形用户界面.ppt》由会员分享,可在线阅读,更多相关《Java图形用户界面.ppt(89页珍藏版)》请在三一办公上搜索。
1、Java图形用户界面,Java界面设计的用途,Java 的图形界面工具包,可以用于工具类软件开发、管理类软件开发、通用客户端开发、银行客户端软件开发、Eclipse 插件开发等方向。在许多知名的大型软件中,都能够见到 Java 的身影,如思维导图软件、Eclipse、IDEA 开发环境等。,2,AWT简介,Abstract Windows Toolkit(AWT)是最原始的 Java GUI 工具包。它是一个非常简单的具有有限 GUI 组件、布局管理器和事件的工具包(如窗体、文本标签、按钮、菜单等)。,3,Swing简介,Swing 是 Sun 开发的一个经过仔细设计的、灵活而强大的 GUI
2、工具包。Swing 是在 AWT 组件基础上构建的。Swing 使用了 AWT 的事件模型和支持类,例如 Colors、Images 和 Graphics。Swing 组件、布局管理器以及事件比 AWT 提供的组件集更为广泛,完全满足各种开发需求。,4,SWT简介,SWT 也是基于一个对等体实现的,在这一点上它与 AWT 非常类似。基于 SWT 的 GUI 既具有主机外观,又具有主机的性能。这样就避免了使用 AWT 和 Swing 而引起的大部分问题。SWT是IBM为它的Eclipse集成开发环境而开发的图形用户界面工具。SWT可以在Eclipse环境外使用,而且提供对操作系统本地图形用户界面
3、的直接访问。因此,基于SWT的Java应用程序拥有本地的图形用户界面并且可以和本地别的应用程序和部件集成在一起。,5,如何选择 GUI 工具包,AWT、Swing、SWT是 Java 中的三大 GUI 工具包,其中 Swing 是最灵活、强大的 GUI 工具包,所以在界面开发中,首选 Swing,它可以胜任绝大多数开发工作。,6,7,本讲内容,1、AWT事件处理模型2、布局管理器3、Swing简介4、Swing组件和容器,8,用AWT生成图形化用户界面,抽象窗口工具包AWT(Abstract Window Toolkit)是 API为Java 程序提供的建立图形用户界面GUI(Graphics
4、 User Interface)工具集,AWT可用于Java的applet和applications中。它支持图形用户界面编程的功能包括:用户界面组件;事件处理模型;图形和图像工具,包括形状、颜色和字体类;布局管理器,可以进行灵活的窗口布局而与特定窗口的尺寸和屏幕分辨率无关;数据传送类,可以通过本地平台的剪贴板来进行剪切和粘贴。,9,1 用AWT生成图形化用户界面,java.awt包中包含了一个完整的类集以支持GUI程序的设计(重量级构件),10,1.1 java.awt包,java.awt包中提供了GUI设计所使用的类和接口。java.awt包提供了基本的java程序的GUI设计工具。主要包
5、括下述三个概念:组件Component容器Container布局管理器-LayoutManager,11,1.2 组件和容器,Java的图形用户界面的最基本组成部分是组件(Component),组件是一个可以以图形化的方式显示在屏幕上并能与用户进行交互的对象,例如一个按钮,一个标签等。组件不能独立地显示出来,必须将组件放在一定的容器中才可以显示出来。类是许多组件类的父类,Component类中封装了组件通用的方法和属性,如图形的组件对象、大小、显示位置、前景色和背景色、边界、可见性等,因此许多组件类也就继承了Component类的成员方法和成员变量,相应的成员方法包括:getComponent
6、At(int x,int y)getFont()getForeground()getName()getSize()paint(Graphics g)repaint()update()setVisible(boolean b)setSize(Dimension d)setName(String name)等,12,1.2 组件和容器,容器(Container)也是一个类,实际上是Component的子类,因此容器本身也是一个组件,具有组件的所有性质,但是它的主要功能是容纳其它组件和容器。布局管理器(LayoutManager):每个容器都有一个布局管理器,当容器需要对某个组件进行定位或判断其大小
7、尺寸时,就会调用其对应的布局管理器。为了使我们生成的图形用户界面具有良好的平台无关性,Java语言中,提供了布局管理器这个工具来管理组件在容器中的布局,而不使用直接设置组件位置和大小的方式。,13,1.2 组件和容器,在程序中安排组件的位置和大小时,应该注意以下两点:1容器中的布局管理器负责各个组件的大小和位置,因此用户无法在这种情况下设置组件的这些属性。如果试图使用Java 语言提供的setLocation(),setSize(),setBounds()等方法,则都会被布局管理器覆盖。2如果用户确实需要亲自设置组件大小或位置,则应取消该容器的布局管理器,方法为:setLayout(null)
8、;,14,1.3 常用容器,容器是Component的子类,一个容器可以容纳多个组件,并使它们成为一个整体。容器可以简化图形化界面的设计,以整体结构来布置界面。所有的容器都可以通过add()方法向容器中添加组件。有三种类型的容器:Window、Panel、ScrollPane,常用的有Panel,Frame,Applet。,15,1.3 常用容器-Frame,1Frame例:import java.awt.*;public class MyFrame extends Framepublic static void main(String args)MyFrame fr=new MyFrame(
9、Hello Out There!);/构造方法fr.setSize(200,200);/设置Frame的大小,缺省为(0,0)fr.setBackground(Color.red);/设置Frame的背景,缺省为红色fr.setVisible(true);/设置Frame为可见,缺省为不可见public MyFrame(String str)super(str);/调用父类的构造方法,16,1.3 常用容器-Frame,一般我们要生成一个窗口,通常是用Window的子类Frame来进行实例化,而不是直接用到Window类。Frame的外观就像我们平常在windows系统下见到的窗口,有标题、边
10、框、菜单、大小等等。每个Frame的对象实例化以后,都是没有大小和不可见的,因此必须调用setSize()来设置大小,调用setVisible(true)来设置该窗口为可见的。另外,AWT在实际的运行过程中是调用所在平台的图形系统,因此同样一段AWT程序在不同的操作系统平台下运行所看到的图形系统是不一样的。例如在windows下运行,则显示的窗口是windows风格的窗口;而在UNIX下运行时,则显示的是UNIX风格的窗口。,17,1.3 常用容器,2Panel Panel与Frame类似,可以添加到Frame中。,18,1.4 LayoutManager 布局管理器,Java为了实现跨平台的
11、特性并且获得动态的布局效果,Java将容器内的所有组件安排给一个布局管理器负责管理,如:排列顺序,组件的大小、位置,当窗口移动或调整大小后组件如何变化等功能授权给对应的容器布局管理器来管理,不同的布局管理器使用不同算法和策略,容器可以通过选择不同的布局管理器来决定布局。布局管理器主要包括:FlowLayout,BorderLayout,GridLayout,CardLayout,GridBagLayout:,19,1.4 布局管理器-FlowLayout,1.FlowLayoutFlowLayout 是Panel,Applet的缺省布局管理器。其组件的放置规律是从上到下、从左到右进行放置,如果
12、容器足够宽,第一个组件先添加到容器中第一行的最左边,后续的组件依次添加到上一个组件的右边,如果当前行已放置不下该组件,则放置到下一行的最左边。当容器的大小发生变化时,用FlowLayout管理的组件会发生变化,其变化规律是:组件的大小不变,但是相对位置会发生变化。例如上图中有三个按钮都处于同一行,但是如果把该窗口变窄,窄到刚好能够放下一个按钮,则第二个按钮将折到第二行,第三个按钮将折到第三行。按钮Open本来在按钮OK的右边,但是现在跑到了下面,所以说组件的大小不变,但是相对位置会发生变化。,20,1.4 布局管理器-FlowLayout,构造方法主要下面几种:FlowLayout(FlowL
13、ayout.RIGHT,20,40);/*第一个参数表示组件的对齐方式,指组件在这一行中的位置是居中对齐、居右对齐还是居左对齐,第二个参数是组件之间的横向间隔,第三个参数是组件之间的纵向间隔,单位是象素。*/FlowLayout(FlowLayout.LEFT);/居左对齐,横向间隔和纵向间隔都是缺省值5个象素FlowLayout();/缺省的对齐方式居中对齐,横向间隔和纵向间隔都是缺省值5个象素 例:Frame f=new Frame();f.setLayout(new FlowLayout();f.add(new Button(button1);f.add(new Button(butto
14、n2);f.add(new Button(button3);,21,1.4 布局管理器-BorderLayout,BorderLayout 是Window,Frame和Dialog的缺省布局管理器。BorderLayout布局管理器把容器分成5个区域:North,South,East,West和Center,每个区域只能放置一个组件。f.setLayout(new BorderLayout();f.add(North,new Button(North);/第一个参数表示把按钮添加到容器的North区域 在使用BorderLayout的时候,如果容器的大小发生变化,其变化规律为:组件的相对位置不
15、变,大小发生变化。例如容器变高了,则North、South区域不变,West、Center、East区域变高;如果容器变宽了,West、East区域不变,North、Center、South区域变宽。不一定所有的区域都有组件,如果四周的区域(West、East、North、South区域)没有组件,则由Center区域去补充,但是如果Center区域没有组件,则保持空白:,22,1.4 布局管理器-GridLayout,使容器中各个组件呈网格状布局,平均占据容器的空间。Frame f=new Frame(GridLayout);f.setLayout(new GridLayout(3,2);/
16、容器平均分成3行2列共6格f.add(new Button(1);/添加到第一行的第一格f.add(new Button(2);/添加到第一行的下一格.f.add(new Button(6);/添加到第二行的第三格,23,1.4 布局管理器-CardLayout,CardLayout布局管理器能够帮助用户处理两个以至更多的成员共享同一显示空间,它把容器分成许多层,每层的显示空间占据整个容器的大小,但是每层只允许放置一个组件,当然每层都可以利用Panel来实现复杂的用户界面。牌布局管理器(CardLayout)就象一副叠得整整齐齐的扑克牌一样,有54张牌,但是你只能看见最上面的一张牌,每一张牌就
17、相当于牌布局管理器中的每一层。,24,1.4 布局管理器,容器的嵌套在复杂的图形用户界面设计中,为了使布局更加易于管理,具有简洁的整体风格,一个包含了多个组件的容器本身也可以作为一个组件加到另一个容器中去,容器中再添加容器,这样就形成了容器的嵌套。下面是一个容器嵌套的例子。例:f=new Frame(GUI example 3);bw=new Button(West);bc=new Button(Work space region);f.add(bw,West);f.add(bc,Center);p=new Panel();f.add(p,North);bfile=new Button(Fil
18、e);bhelp=new Button(Help);p.add(bfile);p.add(bhelp);f.pack();f.setVisible(true);,25,1.4 布局管理器,小 结:1Frame是一个顶级窗口。Frame的缺省布局管理器为BorderLayout。2Panel 无法单独显示,必须添加到某个容器中。Panel 的缺省布局管理器为FlowLayout。3当把Panel 作为一个组件添加到某个容器中后,该Panel 仍然可以有自己的布局管理器。因此,可以利用Panel 使得BorderLayout 中某个区域显示多个组件,达到设计复杂用户界面的目的。4如果采用无布局管理
19、器 setLayout(null),则必须使用setLocation(),setSize(),setBounds()等方法手工设置组件的大小和位置,此方法会导致平台相关,不鼓励使用。,26,2 AWT事件处理模型,要能够让图形界面接收用户的操作,就必须给各个组件加上事件处理机制。在事件处理的过程中,主要涉及三类对象:Event-事件,用户对界面操作在java语言上的描述,以类的形式出现,例如键盘操作对应的事件类是KeyEvent。Event Source-事件源,事件发生的场所,通常就是各个组件,例如按钮Button。Event handler-事件处理者,接收事件对象并对其进行处理的对象。,
20、27,事件及处理机制,组件(事件发生者)触发一个相应类型的事 件此事件由相应类型的Listener(事件监听者)接收并处理,28,事件及处理机制,调用按扭的 addActionListener()方法,为该按扭指定监听者。,29,实现步骤,根据需要定义相应类型的监听者类,在类的 定义中完成事件的处理;创建事件监听者对象;为将会触发事件的组件C注册相应的事件监听 者对象(使用C的addXXXListener()方法)。例:ButtonAct.java,30,public class ButtonAct extends Frame.public ButtonAct()./为b1注册事件监听者B1b
21、1.addActionListener(new B1();add(b1);./利用inner class结构定义监听者类 class B1 implements ActionListener/利用actionPerformed方法进行事件处理public void actionPerformed(ActionEvent e)who.setText(Button 1);./:,31,2.1 事件类,与AWT有关的所有事件类都由类派生,它也是EventObject类的子类。AWT事件共有10类,可以归为两大类:低级事件和高级事件。类是所有事件对象的基础父类,所有事件都是由它派生出来的。AWT的相关
22、事件继承于类,这些AWT事件分为两大类:低级事件和高级事件,低级事件是指基于组件和容器的事件,当一个组件上发生事件,如:鼠标的进入,点击,拖放等,或组件的窗口开关等,触发了组件事件。高级事件是基于语义的事件,它可以不和特定的动作相关联,而依赖于触发此事件的类,如在TextField中按Enter键会触发ActionEvent事件,滑动滚动条会触发AdjustmentEvent事件,或是选中项目列表的某一条就会触发ItemEvent事件。,32,2.1 事件类,低级事件ComponentEvent(组件事件:组件尺寸的变化,移动)ContainerEvent(容器事件:组件增加,移动)Windo
23、wEvent(窗口事件:关闭窗口,窗口闭合,图标化)FocusEvent(焦点事件:焦点的获得和丢失)KeyEvent(键盘事件:键按下、释放)MouseEvent(鼠标事件:鼠标单击,移动)高级事件(语义事件)ActionEvent(动作事件:按钮按下,TextField中按Enter键)AdjustmentEvent(调节事件:在滚动条上移动滑块以调节数值)ItemEvent(项目事件:选择项目,不选择项目改变)TextEvent(文本事件,文本对象改变),33,2.2 事件监听器,每类事件都有对应的事件监听器,监听器是接口,根据动作来定义方法。AWT的组件类中提供注册和注销监听器的方法:
24、注册监听器:public void add(listener);注销监听器:public void remove(listener);例如Button类:(查API)public class Button extends Component public synchronized void addActionListener(ActionListener l);public synchronized void removeActionListener(ActionListener l);,34,2.3 AWT事件及其相应的监听器接口,1可以声明多个接口,接口之间用逗号隔开。implements
25、 MouseMotionListener,MouseListener,WindowListener;2可以由同一个对象监听一个事件源上发生的多种事件:f.addMouseMotionListener(this);f.addMouseListener(this);f.addWindowListener(this);则对象f 上发生的多个事件都将被同一个监听器接收和处理。,35,2.3 AWT事件及其相应的监听器接口,3事件处理者和事件源处在同一个类中。本例中事件源是Frame f,事件处理者是类ThreeListener,其中事件源Frame f是类ThreeListener的成员变量。在这里所
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 图形 用户界面
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5436052.html