欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    【教学课件】第16讲图形用户界面㈡.ppt

    • 资源ID:5657970       资源大小:284KB        全文页数:33页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    【教学课件】第16讲图形用户界面㈡.ppt

    /,第16讲 图形用户界面,布局管理器事件驱动设计AWT高级组件(一),教学目标,掌握布局管理器的使用理解事件驱动机制掌握事件驱动设计方法掌握AWT高级组件的应用,布局管理器,在前面课程的学习中,经常会发生这样的情况,当将很多的组件放在容器里面的时候,这些组件摆放将很凌乱,有时候甚至看不见部分组件。这是因为没有对这些组件进行布局管理。AWT提供了5个类来对容器页面进行管理,它们均直接继承自类。FlowLayout(流式布局)BorderLayout(边界布局)GridLayout(网格布局)CardLayout(多层/卡片布局)GridBagLayout(动态网格布局),布局管理器-FlowLayout,FlowLayout是Applet和Panel容器的默认布局管理器,它按照从上到下、从左到右的规则,将添加到容器中的组件依次排列,默认情况下每行组件均居中排列。自动调用组件的getPreferredSize()方法,使用组件的最佳尺寸来显示组件。FlowLayout的构造函数:FlowLayout():居中对齐方式,组件间的水平和竖直间距为缺省值5个象素。FlowLayout(int alignment):可以设定每一行组件的对齐方式 FlowLayout(int alignment,int horz,int vert):可以设定组件间的水平和垂直距离,import java.awt.*;public class Ex9_9public static void main(String args)Frame frm=new Frame(FlowLayout演示窗口);Button but1,but2,but3,but4,but5;but1=new Button(“按钮一”);but2=new Button(按钮二);but3=new Button(“按钮三”);but4=new Button(按钮四);but5=new Button(按钮五);/设置FlowLayout布局,并且组件左对齐frm.setLayout(new FlowLayout(FlowLayout.LEFT);frm.add(but1);/把五个按钮加入容器中frm.add(but2);frm.add(but3);frm.add(but4);frm.add(but5);frm.setSize(200,100);frm.setLocation(100,100);frm.setVisible(true);,程序分析:程序运行结果如图 所示。当拖动窗口的边界改变窗口大小时,将会发现窗口里面的组件也随着窗口大小而改变位置,组建的布局就像流动式的一样,这就是FlowLayout布局的特点。,FlowLayout示例,布局管理器-BorderLayout,BorderLayout是Windows及其子类Frame的默认布局管理器,它将容器分为5个部分,分别命名为NORTH、SOUTH、WEST、EAST和CENTER。下面是BorderLayout所定义的构造函数:BorderLayout():生成默认的边界布局BorderLayout(int horz,int vert):设定组件间的水平和垂直距离用add()方法往容器中添加组件时必须指明添加的位置,若没有指明放置位置,则表明为默认的“Center”方位。若每个区域或若干个区域没有放置组件,东西南北区域将不会有预留,而中间区域将置空。,add(“North”,new Button(“North”);add(new Button(“West”),BorderLayout.SOUTH);,import java.awt.*;public class Ex9_10public static void main(String args)Frame frm=new Frame(BorderLayout演示窗口);BorderLayout border=new BorderLayout(2,5);Button but1,but2,but3,but4,but5;but1=new Button(按钮东);but2=new Button(按钮南);but3=new Button(按钮西);but4=new Button(按钮北);but5=new Button(按钮中);frm.setLayout(border);frm.add(but1,border.EAST);frm.add(but2,border.SOUTH);frm.add(but3,border.WEST);frm.add(but4,border.NORTH);frm.add(but5,border.CENTER);frm.setSize(200,150);frm.setLocation(100,100);frm.setVisible(true);,程序分析:运行程序,将看到如图的图形。如果容器使用BorderLayout类对象作为布局管理器,添加任何一个组件都将以边界作为参照。比如,frm.add(but1,border.EAST);就是在容器frm的最左端添加一个组件but1。,BorderLayout示例,说明:每个区域只能添加一个组件,若添加多个,则只能显示一个组件。如果想在一个区域添加多个组件,则必须先在该区域放一个Panel容器,再将多个组件放在该Panel容器中。,布局管理器-GridLayout,GridLayout是一种很容易理解的布局管理器,它将容器按照指定的行数、列数分成大小均匀的网格,然后将添加到容器里面的组件一一放入。GridLayout的构造函数如下所示:GridLayout():生成一个单列的网格布局GridLayout(int row,int col):生成一个设定行数和列数的网格布局GridLayout(int row,int col,int horz,int vert):可以设置组件之间的水平和垂直间隔,import java.awt.*;public class Ex9_11 public static void main(String args)Frame frm=new Frame(GridLayout演示窗口);GridLayout grid=new GridLayout(3,4);frm.setLayout(grid);for(int i=1;i=12;i+)frm.add(new Button(Integer.toString(i);frm.setSize(200,150);frm.setVisible(true);,程序分析:由于使用GridLayout布局管理器布局的容器里面添加的组件大小完全相同,所以经常将界面中具有这些规则的组件放入一个新的容器里面,使用GridLayout进行布局,然后再将这个容器添加到界面容器里面。,GridLayout示例,布局管理器-CardLayout,CardLayout是一种将每个组件看作一张卡片,且将所有卡片码成一摞,每一时刻只有一张卡片被显示的布局管理器。有人将其形象地描述为一副落成一叠的扑克牌。第一个添加到容器中的组件位于最低层,最后一个添加到容器中的组件位于最上层。请参考API文档熟悉CardLayout类的构造方法和常用方法。,布局管理器-GridBagLayout,GridBagLayout生成的布局管理器也是和GridLayout一样是使用网格来进行布局管理的。所不同之处在于GridBagLayout可以通过类GridBagConstraints来控制布局容器内各组件的大小,每个组件都使用一个GridBageConstraints对象来给出它的大小和摆放位置,这样就可以按照设计者的意图,改变组件的大小,把它们摆在设计者希望摆放的位置上。这种灵活性是前面几个布局管理器所不具备的。有关GridBageLayout布局管理器使用的详细情况参阅API文档。,容器的嵌套,实际应用中,可能将整个窗口分成很多小块,每一块包含几个组件,这些组件用一个容器来存放,然后再将这些小块容器添加到窗口对象中。AWT就提供了另外一个容器类Panel。可以在一个容器中添加几个Panel容器对象,每个Panel容器对象都可以指定不同的布局方式。,import java.awt.*;public class Ex9_12public static void main(String args)Frame frm=new Frame(容器的嵌套);Label lab=new Label(0.,Label.RIGHT);frm.setLayout(null);Panel pnl=new Panel();GridLayout grid=new GridLayout(4,4);pnl.setLayout(grid);String s=7,8,9,/,4,5,6,*,1,2,3,-,0,.,=,+;for(int i=0;i16;i+)pnl.add(new Button(si);lab.setBackground(Color.orange);lab.setBounds(20,30,160,20);pnl.setBounds(20,60,160,80);frm.add(lab);frm.add(pnl);frm.setSize(200,150);frm.setVisible(true);,程序分析:程序中,将大小相同的12个按钮组件添加在一个Panel对象里面,使用GridLayout进行布局,然后再将这个Panel对象添加到顶层容器Frame对象中。,Panel示例,事件驱动设计,事件驱动设计,在窗口程序设计里,事件(event)的设计是不可或缺的一块。当按下按钮时,也就触发了“按钮被按”的事件,至于计算机要做什么样的反应,则是由程序代码来做判断与决定的。前面已经学会来怎样去绘制一个图形用户界面,但是还没有编写用户交互的代码。下面来认识一下Java的事件处理机制。每发生一个事件,程序都需要作出相应的响应,这称为事件处理。,委派事件模型,事件处理机制的思想是:可能产生事件的对象(事件源,如窗口,按钮等)收到用户发出的操作指令后产生相应的事件,然后将这些事件分别发送给不同的监听器,由监听器来处理这些事件,并将处理结果返回。整个过程中,监听器简单的等待,直到它收到一个事件。这种事件处理机制使得处理事件的应用程序逻辑与生成那些事件的界面逻辑(容器或者组件)彼此分离,相互独立存在。,import java.awt.*;import java.awt.event.*;class Ex9_13 extends Frame implements ActionListenerstatic Ex9_13 frm=new Ex9_13();static Button btn=new Button(将窗口变成黄色);public static void main(String args)btn.addActionListener(frm);/把frm向btn注册,让frm监听事件frm.setLayout(new FlowLayout();frm.setTitle(Action Event);frm.setSize(200,150);frm.add(btn);frm.setVisible(true);public void actionPerformed(ActionEvent e)frm.setBackground(Color.yellow);,程序分析:事件源:也就是事件发生的场所,通常就是各个组件。如本例的按钮对象。事件:用户对界面操作在Java语言上的描述。它由用户和界面中的组件交换而产生,比如移动鼠标、点击鼠标按钮和按下键盘键等都可以引发事件。本例中,当按下按钮时,就产生了一个事件ActionEvent。监听:Java使用一组接口来实现对事件源的监听。本例中,为了使frm窗口对象能够监听按钮触发的事件,让Ex9_13对象实现事件处理的接口。,自身实现监听器示例,import java.awt.*;import java.awt.event.*;class Ex9_14static Frame frm=new Frame(Action Event);static Button btn=new Button(将窗口变成黄色);public static void main(String args)btn.addActionListener(new ActLis();frm.setLayout(new FlowLayout();frm.setTitle(Action Event);frm.setSize(200,150);frm.add(btn);frm.setVisible(true);/定义内部类ActLis,并实现ActionListener接口static class ActLis implements ActionListenerpublic void actionPerformed(ActionEvent e)/事件发生的处理操作frm.setBackground(Color.yellow);,程序分析:上个例子中,选择了窗口作为监听者。事实上也可以自定义一个类来实现ActionListener接口,再把此类产生的对象作为监听。通常把实现接口的类定义在主类里,自己成为它的内部类。,内部类实现监听器示例,事件处理类,Java把事件类大致分成两种:语义事件(semantic events)与底层事件(low-lever events)(指屏幕上可视化组件的低级输入或窗口系统事件)。其中语义事件直接继承自AWTEvent,如ActionEvent、AdjustmentEvent与ComponentEvent等等,底层事件则是继承自ComponentEvent类,如ContainerEvent、FocusEvent、WindowEvent与KeyEvent等等。下表提供了常用的事件类、事件监听接口与事件监听接口提供的方法。,ActionEvent事件类的处理,ActionEvent事件对应于组件的主要用途。点击按钮,选择菜单项目,或向单行文本框输入字符串并敲击Enter键时,都会发生ActionEvent事件。例:Ex9_15,程序分析:点击前面两个按钮,文本框将显示相应的信息,点击退出按钮,程序将结束。类Ex9_15继承自Frame,frm对象是按钮组件的容器。当按下按钮时,将会发生ActionEvent类事件,按钮本身不作任何处理,这时候就会把事件向上传递,直到窗口对象frm监听为止。当frm对象监听到按钮事件后,就会运行ActionListener接口提供的方法actionPerformed(ActionEvent e)。由于ActionEvent类继承自EventObject类,所以可以使用EventObject类提供的方法getSource()来查看是哪个对象激活的事件。,TextEvent类,文本事件是指当窗口中TextField或TextArea组件里的文本改变时所触发的事件。Java用TextEvent类来处理这个事件,而TextListener则为监听TextEvent事件的接口,该接口声明了textValueChanged()方法:public void textValueChanged(TextEvent e)当TextEvent事件发生时,textValueChanged()就会执行。Ex9_16,程序分析:当在文本框输入文字时,textValueChanged()方法将会执行,两个标签分别显示文本框的内容和文本的长度。程序中在类Ex9_16里面定义了一个内部类TextHandler,由TextListener接口实现。文本框组件tf向内部类对象注册监听。,KeyEvent类,KeyEvent类继承自InputEvent类,是属于低层次的事件类,只要在键盘上按下任何键,都会触发按键事件。要处理KeyEvent事件,可以用KeyListener接口来承担监听。Ex9_17 但是KeyListener接口提供的事件处理方法较多,在实现的类里针对每一个方法都要编写处理代码。即使没有作相关的处理,也必须要把这些方法都写上去,所以用起来有点不方便。除了KeyListener之外,AWT还提供了KeyAdapter类来处理KeyEvent事件。Ex9_18,程序分析:程序中类Ex9_17用KeyListener接口处理KeyEvent事件,必须用类实现KeyListener接口,然后用这个类对象来监听KeyEvent事件。当在文本框按键时,KeyEvent事件将被触发,frm对象监听到之后,KeyListener接口定义的三个方法将会执行。程序中类Ex9_18里面定义了一个内部类KeyLis,然后用这个内部类的对象去监听KeyEvent事件。在内部类KeyLis中,定义了方法keyTyped()方法,这个方法覆盖了父类KeyAdapter类中的方法keyTyped()。,MouseEvent类,鼠标事件类MouseEvent也继承自InputEvent类,属于低层次事件类的一种,只要鼠标的按钮按下、鼠标指针进入或移出事件源、移动鼠标、拖拽鼠标,都会触发鼠标事件。同KeyEvent事件一样,可以使用多种方法来处理MouseEvent事件。AWT提供了MouseListener接口和MouseMotionListener接口作为MouseEvent事件的监听。为了方便操作,还提供了MouseAdapter类和MouseMotionAdapter类来处理MouseEvent事件,它们分别用MouseListener接口和MouseMotionListener接口进行定义。,MouseEvent类,1用MouseListener接口来处理MouseEvent事件例:Ex9_19 2用MouseMotionListener接口来处理MouseEvent事件例:Ex9_20 3用MouseAdapter类事件处理MouseEvent事件例:Ex9_21,WindowEvent类,低层次事件类。窗口的创建、缩小、关闭、变成非活动窗口等操作都会触发WindowEvent事件。AWT提供了WindowListerner接口用于窗口事件的监听。为了简便操作,提供了WindowAdapter类来处理WindowEvent事件。WindowListerner接口中声明了7个方法。,例:Ex9_22,AWT高级组件,文本框列表List,提供一个可以滚动的文本项列表,用户可以选择一个或者多个选项。,List组件使用,当用户选取或者取消选取文本框列表中的某个选项时,ItemEvent事件就会被触发。可以使用addItemListener()方法把事件监听向List类的对象注册,再将事件处理的程序代码编写在itemStateChanged()方法里。例:Ex9_23,程序分析:当选择某一选项时,窗口中的标签颜色将相应产生变化。本例中,类Ex9_23由接口ItemListener实现,所以Ex9_23类对象frm就可以用来监听ItemEvent事件。当用户选择某一个选项时,ItemEvent事件e将被触发,相应的itemStateChanged()方法就会执行。使用List类对象的getSelectedIndex()方法获取哪个选项被选中,根据返回值设置窗口中标签对象的前景色。,下拉菜单Choice,与List组件类似,提供了多个选项供用户选择。不同处只能选择单一项目,不能复选只能显示一个选项。,Choice组件使用,下拉菜单的事件处理方法和文本框列表(List)相同,当用户选择某个选项时,ItemEvent事件将被触发。例Ex9_24Choice组件的使用,程序分析:当选择某一选项时,窗口中的标签颜色将相应产生变化。本例和例22类似,类Ex9_24由接口ItemListener实现,所以Ex9_24类对象frm就可以用来监听ItemEvent事件。当用户选择某一个选项时,ItemEvent事件e将被触发,相应的itemStateChanged()方法就会执行。使用Choice类对象的getSelectedItem()方法获取哪个选项被选中,根据返回值设置窗口中标签对象的前景色。也可以使用getSelectedIndex()方法来实现。,

    注意事项

    本文(【教学课件】第16讲图形用户界面㈡.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开