《图形用户界面》PPT课件.ppt

上传人:tia****nde 文档编号:2741427 上传时间:2019-11-29 格式:PPT 页数:33 大小:365.31KB
返回 下载 相关 举报
《图形用户界面》PPT课件.ppt_第1页
第1页 / 共33页
《图形用户界面》PPT课件.ppt_第2页
第2页 / 共33页
《图形用户界面》PPT课件.ppt_第3页
第3页 / 共33页
点击查看更多>>
资源描述
1,第八章 图形用户界面,2,图形用户界面简称GUI(Graphics User Interface),它给用户提供了一个直观、方便、快捷的图形化操作界面,就象WINDODS图形操作界面。有了它,计算机的使用变得十分便捷。 Java提供了多种包用于设计图形用户界面, 如AWT和Swing等,它们的使用方法雷同。本章介绍主要介绍AWT。,3,8.1 抽象窗口工具箱AWT组件,在AWT(Abstract Window Toolkit)的概念中,窗口系统中所显示的各种对象都统称为“组件” (Component) 。 组件分为: 基本组件是构成图形用户界面的基本元素。 容器组件用来放置其它组件的组件,4,下表列出了AWT中的基本组件。,1.基本组件,5,2. 容器组件 容器组件是用来放置其它组件的容器,故称为容器组件(Container)。用户可以把各种组件放到容器组件中,甚至把一个容器组件放到另一个容器组件中,因为容器组件也是组件,都是Component类的子类。 AWT用Container类来定义最基本的容器,所有可以作为容器的窗口对象都是Container类或其子类的对象。 AWT提供了4个容器类: Windows类、Frame类、Dialog类、Panel类,6,框架java.awt.Frame,建立窗口是Java图形用户界面程序设计的第一步,一般由Frame类来完成这一功能。 Frame类用于创建带有标题、菜单栏、最大化、最小化按钮的完整的窗口。 Frame类的构造方法有: Frame() 创建一个不带标题的框架 Frame(String) 创建一个带标题的框架,8.2 容器组件,7,import java.awt.*; import java.awt.event.*; public class test public static void main(String args) Frame f=new Frame(“我的第一个窗口“); f.setSize(400,300);/设置窗口大小 f.setLayout(null);/设置布局模式为空 f.addWindowListener(new MyWindowAdapter(); /使得Frame能够监听窗口事件 f.setVisible(true);/创建窗口后要调用setVisible(true)才能显示出来 ,例:创建一个Frame窗口,class MyWindowAdapter extends WindowAdapter public void windowClosing(WindowEvent e) System.exit(0); /正常退出 ,8,容器组件除了Frame之外,还有面板(Panel)、对话框(Dialog)等 面板(Panel)是能在屏幕上实际显示的组件,但必须放在Windows、Frame、Dialog等容器中才能够显示。 对话框是有标题条而无菜单和最小化图标的容器组件,但它必须依附在某个窗口上(如Frame),一旦它所依附的窗口关闭了, 对话框也自动关闭 。,9,8.按钮,按钮是相对简单的一种组件,它在屏幕上通常表现为一块有边界的矩形区域,上面有文字标记来说明该按钮的功能, 按钮由Button类来定义,其构造方法有二个: Button( ) 生成一个没有标记的按钮 Button(String label) 生成一个带标记label的按钮 设置按钮的位置及大小: setBounds(x,y,width,height); x:按钮左上角的横坐标 y:按钮左上角的纵坐标 width:按钮的宽度 height:按钮的高度,10,创建Button后,可调用Frame对象的add方法,将组件放到窗口上。 Button类中有一系列对按钮进行管理的方法,可以进行设置和获取按钮的状态,处理按钮产生的事件等。常用的方法有:setLabel(String label) 设置按钮标记,Frame f=new Frame(“我的第一个窗口“); f.setSize(400,300); f.setLayout(null); Button b=new Button(“你好!“); b.setBounds(50,50,80,55); f.add(b);,11,8.4 标签,标签(Label)是一种只能用来显示单行文本的组件。 标签在容器中的对齐方式有三种:左对齐、居中和右对齐, 用LABEL.LEFT、LABEL.CENTER、LABEL.RIGHT三个静态常量表示,在程序中可以设置其对齐方式。 标签类构造方法: Label( ) 生成一个空标签 Label(String text) 生成一个带有指定文本的标签 Label l=new Label(“hello java“); l.setBounds(50,150,80,55); f.add(l);,12,8.5 JBuilder,JBuilder是一种很好的Java开发工具,可以方便地进行可视化开发。 下面我们使用JBuilder开发一个简单的应用程序,在界面上显示一个按钮和一个标签,点击按钮后,标签显示“HelloJava” 程序的运行方式: (1)在控制台界面下可以运行该程序。运行Application类,注意包名 (2)在FileNewArchiveApplication下打包成可执行jar包,双击即可运行 用JBuilder开发一个简单的Applet,13,8.6 组件在容器中的布局,在以往的用户界面中,每个控件的位置一般都是用点坐标确定的,但是在Java中,情况有所不同。由于Java程序需要运行在不同的操作系统、不同的屏幕设置下,用点坐标来确定位置就难以适应各种情况,因此Java使用布局管理器来进行排版。布局管理器的优点是能根据不同的屏幕自动进行排版,缺点是控件在屏幕上的确切位置难以确定。 AWT提供了五种布局管理器: BorderLayout、 FlowLayout、GridLayout、CardLayout和GridBagLayout。,14,如果用户不指定容器所使用的布局管理器,那么容器将使用自己缺省的布局管理器。每当容器需要改变外观时,这些缺省的布局管理器会发挥作用。AWT提供的布局管理器各有各的长处和缺点。用户根据不同要求,选用不同的AWT布局管理器。 1) 如果要求尽量使用所有的空间来显示组件,可以考虑使用BorderLayout,应该将占用空间最大的组件放在中心部位。BorderLayout有五个区域:东、西、南、北、中。如果用户扩大窗口,用户将会看到中心区域会尽可能的扩大,而其他区域只扩大到容纳组件所需空间的大小。,15,2)如果需要在紧凑的一行中以组件的自然尺寸显示较少组件时,可以考虑使用FlowLayout。 FlowLayout将组件以它们合适的尺寸放在一行中。如果容器中的水平空间对于将所有组件放在一行中太小,那么FlowLayout将用多行显示。 3)用户需要在多行或多列中显示一些同样尺寸的组件,GridLayout最适合此情况。如果有必要的话,可以使用面板来容纳组件。GridLayout将组件放置在格栅的单元空间中。每个组件占据其单元空间的所有空间,而且每个单元空间具有相同的尺寸。,16,4) CardLayout所管理的每个组件就像在纸盒里放的纸牌,在某一时刻只有最上面的一张可见。用户可以通过指定组件的名字来选择要显示的组件。 下面我们用JBuilder开发一个简单的计算器,能够进行加、减、乘、除运算。,17,8.7 AWT中的其它类,1. Dimension类 它指定了一个矩形区域的尺寸; 2. Shape类 它包含了点、矩形和多边形。 3. Color类 它定义了一些常量来表示常用的颜色,比如,Color.blue表示蓝色。 4. Image类 提供了对图像数据的操作途径,18,5. Fonts类 它们用来控制文本的外观。Font类使用户可以获得关于字体的信息并创建不同的字体对象。 6. Graphics类 Graphics类负责AWT的绘图。 7. Event类 Event类负责AWT的事件处理。,19,8.8 事件处理,对支持图形用户界面的任何一种操作系统来说,都必须不断监视环境中发生的各种事件,如:鼠标移动,用户按下了某个键等。随后,每个程序都要决定对这些事件作出什么样的响应。 当用户在组件上作出动作时(如:在组件上单击鼠标或按回车键),就创建了一个事件对象。,20,一个事件对象包含了以下信息: 1) id-事件的类型。如按键事件、单击鼠标事件等 2) target-发生事件的对象 3) when-指出事件发生的时间 4) x, y-发生事件的坐标 5) key-键盘事件中被按下的键 6) arg-一个与事件相关的参数。 7) modifier-修饰键的状态(即Alt,Ctrl键的状态),21,事件处理三步骤: (1)确定事件源,如在什么组件上监听事件 (2)将组件的某类事件交给事件监听器处理。 (3)在事件监听器的相应事件响应函数中实现自己的功能。 当在组件上产生某类事件对象时,这个事件对象会被传递给上面指定的事件监听器,事件监听器接收到事件对象后,会根据事件对象内封装的信息,决定执行哪个事件响应函数。,22,MouseListener主要处理鼠标是否在某个组件上、是否按下了鼠标键、鼠标是否离开了某个组件等事件。 MouseMotionListener主要处理鼠标是否在移动等事件。 WindowListener主要处理窗口事件,如窗口的最大化、最小化、打开、关闭等事件,一些事件监听器的事件响应函数,23,例: 以响应窗口关闭事件为例。当点击窗口的关闭按钮时,会产生WindowClosing事件,这时必须在该事件的处理函数中调用退出函数,窗口才能正常关闭,否则关闭不了。 (1)事件源为窗口本身 Frame f=new Frame(“我的第一个窗口“); (2)将窗口的窗口事件交给WindowListener监听器处理。 f.addWindowListener(new MyWindowAdapter(); 注意 public void addWindowListener(WindowListener l) 参数类型是WindowListener类型,而WindowListener是一个接口,只能为该函数传递一个实现了 WindowListener接口的类的对象。Java提供了一个抽象类WindowAdapter,该类实现了WindowListener接口,我们可以定义WindowAdapter类的一个子类MyWindowAdapter ,将该子类的对象传递给addWindowListener函数即可。,24,(3)在事件监听器的相应事件函数中实现自己的功能。 class MyWindowAdapter extends WindowAdapter public void windowClosing(WindowEvent e) System.exit(0); /正常退出 产生windowClosing事件后,系统会自动调用事件监听器的windowClosing函数。,25,import java.awt.*; import java.awt.event.*; public class test public static void main(String args) Frame f=new Frame(“我的第一个窗口“); f.setSize(400,300);/设置窗口大小 f.setLayout(null);/设置布局模式为空 f.addWindowListener(new MyWindowAdapter(); /使得Frame能够监听窗口事件 f.setVisible(true);/创建窗口后要调用setVisible(true)才能显示出来 ,class MyWindowAdapter extends WindowAdapter public void windowClosing(WindowEvent e) System.exit(0); /正常退出 ,完整程序,26,import java.awt.*; import java.awt.event.*; public class test public static void main(String args) Frame f=new Frame(“我的第一个窗口“); f.setSize(400,300);/设置窗口大小 f.setLayout(null);/设置布局模式为空 f.addWindowListener(new WindowAdapter() /使得Frame能够监听窗口事件 public void windowClosing(WindowEvent e) /正常退出 System.exit(0); ); f.setVisible(true);/创建窗口后要调用setVisible(true)才能显示出来 ,例:创建一个Frame窗口(方法二),创建了一个 匿名内部类对象 该匿名内部类的父类是 WindowAdapter 该匿名内部类覆盖了 父类的 windowClosing方法,27,例: 以在按钮上响应点击鼠标事件(MouseClicked)为例: (1)确定事件源 JButton jButton1 = new JButton(); (2)将按钮的鼠标事件交给MouseListener监听器处理。 jButton1.addMouseListener(new MymouseAdapter(this); public void addMouseListener(MouseListener l) 参数是接口类型,Java提供了抽象类MouseAdapter,实现了MouseListener接口,我们只需要定义MouseAdapter类的子类,然后用该子类创建一个对象传递给addMouseListener函数。 (3)在事件监听器的相应事件函数中实现自己的功能。,28,class MymouseAdapter extends MouseAdapter private Frame1 adaptee; MymouseAdapter (Frame1 adaptee) this.adaptee = adaptee; public void mouseClicked(MouseEvent e) adaptee.jButton1_mouseClicked(e); ,29,关于ActionEvent 当我们点击了一个按钮、选择了菜单中的某个项目或在文本编辑框中回车后,均会产生ActionEvent事件。 (1)确定事件源 Button button1 = new Button(); (2)将按钮的ActionEvent事件交给ActionListener监听器处理。 button1.addActionListener(new MyFrame_button3_actionAdapter(this); public void addActionListener(ActionListener l) 我们必须定义一个类,让这个类实现ActionListener接口 (3)在该类中实现来自ActionListener接口的actionPerformed方法。 当产生ActionEvent事件时,会自动调用actionPerformed方法,30,class MyFrame_button1_actionAdapter implements ActionListener private MyFrame adaptee; MyFrame_button1_actionAdapter(MyFrame adaptee) this.adaptee = adaptee; public void actionPerformed(ActionEvent e) adaptee.button1_actionPerformed(e); ,31,小结,Java提供了多种图形用户接口包。本章介绍了AWT中一些常用基本组件、容器,以及如何使用它们创建基于图形用户界面的应用。最后讲述了事件处理机制,32,java.util包提供了随机数类Random。 java.util.Random r1=new java.util.Random(); int data1; data1=r1.nextInt();/产生随机整数 考虑:如何用随机数类产生09之间的随机整数?,补充,33,import java.util.*; class test public static void main(String args) Random r1=new Random(); int data1; data1=r1.nextInt(); if(data10)data1=data1*(-1); data1=data1%10; System.out.println(data1); ,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!