鼠标测试-布局与事.ppt

上传人:小飞机 文档编号:6380091 上传时间:2023-10-22 格式:PPT 页数:49 大小:239KB
返回 下载 相关 举报
鼠标测试-布局与事.ppt_第1页
第1页 / 共49页
鼠标测试-布局与事.ppt_第2页
第2页 / 共49页
鼠标测试-布局与事.ppt_第3页
第3页 / 共49页
鼠标测试-布局与事.ppt_第4页
第4页 / 共49页
鼠标测试-布局与事.ppt_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《鼠标测试-布局与事.ppt》由会员分享,可在线阅读,更多相关《鼠标测试-布局与事.ppt(49页珍藏版)》请在三一办公上搜索。

1、第16章 鼠标测试布局与事件,能力目标:掌握边框、流、网格、卡片等常用布局及其基本用法。理解事件及其监听处理,掌握动作事件、鼠标事件和选项事件。学会使用下拉组合框、列表框、文本区和滚动窗格等组件。能运用布局和事件处理编写鼠标按键测试程序。,内容介绍,16.1 任务预览16.2 布局16.3 事件16.4 事件适配器与鼠标事件16.5 选项事件与列表选择事件16.6 本章小结16.7 实训16:鼠标测试,16.1 任务预览,本章实训程序运行结果:,16.2 布局,布局管理器LayoutManager的对象就是布局。常用布局:BorderLayout、FlowLayout、GridLayout和C

2、ardLayout,此外还有BoxLayout和GridBagLayout等。注意:LayoutManager是接口,布局类都实现了该接口。容器一般有默认的布局,如JFrame窗框默认是边框布局(BorderLayout对象),JPanel面板默认是流布局(FlowLayout对象)。容器也可通过执行下面的方法设置或更改布局:容器对象.setLayout(布局对象);,16.2.1 BorderLayout边框布局,BorderLayout布局把容器划分为东、南、西、北和中部5个区域,分别使用静态常量字段EAST、SOUTH、WEST、NORTH和CENTER标识。强调:每个区域最多只能(直接

3、)放置一个组件。如果一个区域要放置两个以上的组件,可先把这些组件放进一个面板中,然后再把面板放置在区域中(容器嵌套)。如果四周都没有组件,则CENTER组件自动填满整个容器。,BorderLayout类有两个构造方法:(1)BorderLayout()(2)BorderLayout(int hgap,int vgap):构造指定组件间距的边框布局。参数hgap是Horizontal gap的缩写,vgap是Vertical gap的缩写。在边框布局容器中放置组件,可调用带约束参数add方法:容器对象.add(组件,BorderLayout.SOUTH);,【例16-1】编写关于边框布局的窗框程

4、序,在窗框中放置6个按钮,其中南边放置2个按钮。,JFrame frame=new JFrame(BorderLayout边框布局);JButton buttonEast=new JButton(东边按钮);JButton buttonSouth1=new JButton(南边按钮1);JButton buttonSouth2=new JButton(南边按钮2);JPanel panSouth=new JPanel();JButton buttonWest=new JButton(西边按钮);JButton buttonNorth=new JButton(北边按钮);JButton butt

5、onCenter=new JButton(中部按钮);frame.setBounds(100,200,400,200);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.add(buttonEast,BorderLayout.EAST);panSouth.add(buttonSouth1);panSouth.add(buttonSouth2);frame.add(panSouth,BorderLayout.SOUTH);frame.add(buttonWest,BorderLayout.WEST);frame.add(butt

6、onNorth,BorderLayout.NORTH);frame.add(buttonCenter,BorderLayout.CENTER);frame.setVisible(true);,16.2.2 FlowLayout流布局,流布局的容器,各组件按添加顺序放置,默认顺序是从顶向下,从左到右,行默认居中对齐。FlowLayout类构造方法有3个:(1)FlowLayout():构造一个流布局,默认居中对齐,水平和垂直间隙为5(像素)。(2)FlowLayout(int align):构造指定对齐方式的流布局,默认水平和垂直间隙也是5。(3)FlowLayout(int align,int

7、 hgap,int vgap)对齐方式参数取自静态常量字段LEFT、CENTER(默认)或RIGHT等,引用方式如 FlowLayout.LEFT。,【例16-2】编写关于FlowLayout布局的窗框程序,在窗框中放置多个个按钮、标签和文本框。,JFrame frame=new JFrame(FlowLayout流布局);FlowLayout flowLay=new FlowLayout();/流布局frame.setLayout(flowLay);JButton button1=new JButton(按钮1);JLabel lab1=new JLabel(标签1);JTextField

8、field1=new JTextField(文本框1);frame.setBounds(100,200,250,200);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.add(button1);frame.add(lab1);frame.add(field1);frame.setVisible(true);,例2,16.2.3 GridLayout网格布局,网格布局把容器等分为行、列方阵,每个格子尺寸相同。网格布局内的所有组件的大小一致,整齐划一。GridLayout类的构造方法有3个:(1)GridLayout()(2)

9、GridLayout(int rows,int cols)(3)GridLayout(int rows,int cols,int hgap,int vgap):构造指定行数、列数、水平和垂直间隙的网格布局。可使用setXxx形式的方法更改网格的行数、列数、水平和垂直间距。需要强调的是:行、列数要求为正整数或0,但不能同时为0。当其中一个为0时,0行表示任意行,0列表示任意列。,【例16-3】编写含GridLayout布局的计算器界面程序,在默认边框布局的窗框中部放置一个4行4列网格布局的面板,北部放文本框,东部放=按钮。,JFrame frame=new JFrame(“GridLayout网

10、格布局”);JPanel pan=new JPanel();GridLayout gridLay=new GridLayout(4,4,2,4);pan.setLayout(gridLay);JTextField field=new JTextField();JButton btnEqual=new JButton(=);JButton btn1=new JButton(7);JButton btn16frame.add(field,BorderLayout.NORTH);frame.add(btnEqual,BorderLayout.EAST);pan.add(btn1);pan.add(b

11、tn16);frame.add(pan,BorderLayout.CENTER);frame.setBounds(100,200,250,200);frame.setDefaultCloseOperation();frame.setVisible(true);,例3,16.2.4 CardLayout卡片布局与幻灯片播放,卡片布局的容器相当于一个盒子,里面放置多张叠放在一起的卡片(组件),执行卡片布局next等方法翻看卡片。CardLayout类常用方法:(1)CardLayout()(2)CardLayout(int hgap,int vgap)(3)void first(Container

12、 parent)(4)void last(Container parent)(5)void next(Container parent)(6)void previous(Container parent)(7)void show(Container parent,String name)在卡片布局容器中放置卡片,要调用带约束参数的add方法,如:容器对象.add(卡片组件,卡片1);该方法把卡片组件添加到容器中,第二个参数用来标识卡片。卡片有了标识名称,就可以执行show方法显示。,【例16-4】编写CardLayout布局程序,在窗框中部放置一个卡片布局面板(卡片盒),内放3张卡片面板,每张

13、卡片设背景色,并放一个标签。窗框下部安放一个面板,上面放4个按钮:“上翻”、“下翻”、“自动播放”和“暂停”。,class CardFrame extends JFrame/窗框类CardLayout cardLay=new CardLayout(10,5);JPanel panCards=new JPanel();/卡片盒JPanel pan1=new JPanel();JLabel lab1=new JLabel(第一张卡片);JPanel panUpDown=new JPanel();JButton btnPageUp=new JButton(上翻);MyThread thread=nu

14、ll;boolean stopAutoPlay;,class MyThread extends Thread/内部线程类 public void run()while(true)cardLay.next(panCards);/自动播放 try Thread.sleep(500);catch(Exception ex)if(stopAutoPlay)break;/暂停播放 public CardFrame()/构造方法this.setTitle(CardLayout卡片布局);this.setBounds(100,200,350,200);this.setDefaultCloseOperatio

15、n(JFrame.EXIT_ON_CLOSE);initialize();this.setVisible(true);,例4,16.2.5 null(空)布局,容器还可设置为null布局,表示空布局、没有布局。“手工”布局:空布局要手工编写代码设置组件的位置和大小。设置组件位置和大小的常用方法:(1)void setBounds(int x,int y,int width,int height)(2)void setLocation(int x,int y):设置组件位置,其中x、y是放置组件的父级坐标。(3)void setSize(int width,int height)其中第(1)个方

16、法包含了第(2)、(3)个方法的功能。,【例16-5】编写手工布局程序,把窗框布局设为空,然后在上面放置标签、文本框和按钮。,JFrame frame=new JFrame(null空布局窗框);frame.setLayout(null);JLabel label=new JLabel(标签);label.setBounds(10,10,30,25);JTextField textField=new JTextField();textField.setBounds(10,40,100,25);JButton button=new JButton(按钮);button.setBounds(120

17、,40,80,25);frame.add(label);frame.add(textField);frame.add(button);frame.setBounds(100,200,250,150);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);,例5,16.3 事件,图形界面程序离不开事件(Event),通过事件驱动方式进行人机互动交流。常用事件:MouseEvent:鼠标事件KeyEvent:键盘事件ActionEvent:动作事件,这是高级的语义事件。ItemEvent:选项事件(语

18、义事件)TextEvent:文本事件(语义事件)语义事件能避开细节问题,适用范围广,具有跨平台性。,16.3.1 事件处理模型,(1)事件源:引发事件的对象,如按钮、菜单项和文本框等。(2)事件监听器:也是事件的处理者,事件监听类的对象。事件监听类要实现相应的接口XxxListener(或适配器XxxAdapter),例如动作事件监听类要实现动作监听接口ActionListener,其声明的抽象方法actionPerformed(ActionEvent e)要在监听类中重写,方法体语句就是事件处理的步骤,方法便是事件处理方法。一个事件源组件往往能引发多种事件,必须在事件源和事件监听器之间搭起传

19、递消息的桥梁,才能响应事件。,(3)事件注册:事件源通过调用添加事件监听器方法实现事件注册,把事件委托给监听器来处理。语法:事件源.addXxxListener(监听器);如:button.addActionListener(new ActionHandler();(4)事件:是事件类的对象。如:ActionEvent、ItemEvent等。上面4点是事件处理的4要素,其中事件源、事件监听器和事件构成了事件处理模型。,JAVA中,将事件的相关信息封装在一个事件对象中,所有的事件对象都最终派生于类,AWT事件处理机制的概要:监听器对象是一个实现了特定监听器接口的类的实例事件源是一个能够注册监听器

20、对象并发送事件对象的对象。当事件发生时,事件源将事件对象传递给所有注册的监听器监听器对象将利用事件对象中的信息决定如何对事件做出相应。,16.3.2 事件类、监听接口/适配器类及方法,16.4 事件适配器与鼠标事件,事件监听接口方法不止1个的情况下,为简化编码,Java提供了相应的事件适配器类(Adapter)。一个适配器类对应一个或多个监听接口。如:KeyAdapter对应1个KeyListenerMouseAdapter对应3个监听接口,其类头如下:public abstract class MouseAdapter extends Object implements MouseListe

21、ner,MouseMotionListener,MouseWheelListener这3个接口各有5个、2个和1个方法,鼠标适配器类共有8个方法(不含继承父类的方法),分别是:鼠标单击、按下、释放、进入组件、离开组件、拖动、移动、滚动滚轮等。,适配器类的方法有方法体“”,里面没有语句。而监听器接口的方法都是抽象的。这样,事件监听对象实现方式有二:实现监听接口继承适配器类(若有的话)。优点:能简化编码。,【例16-6】编写鼠标按键测试程序。在灰色面板上分别按下鼠标左键、中间滚轮键和右键,在界面下方的文本框中显示相应的文字。,class MouseTestFrame extends JFrame

22、private JLabel label=new JLabel(鼠标测试区:);private JPanel panTest=new JPanel();private JTextField textField=new JTextField();public MouseTestFrame()this.setTitle(测试鼠标按键);this.setBounds(100,200,300,200);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);initialize();this.setVisible(true);,public void i

23、nitialize()this.add(label,BorderLayout.WEST);this.add(panTest,BorderLayout.CENTER);this.add(textField,BorderLayout.SOUTH);panTest.setBackground(Color.GRAY);panTest.addMouseListener(new MouseHandler();class MouseHandler extends MouseAdapter/事件监听类public void mouseClicked(MouseEvent e)if(e.getButton()=

24、MouseEvent.BUTTON1)textField.setText(按下了鼠标左键);if(e.getButton()=MouseEvent.BUTTON2)textField.setText(按下了鼠标中间的滚轮键);if(e.getButton()=MouseEvent.BUTTON3)textField.setText(按下了鼠标右键);public class Example6 new MouseTestFrame();,16.5 选项事件与列表选择事件,选项事件(ItemEvent)事件源:单选按钮复选框下拉组合框(JComboBox)列表选择事件(ListSelectionE

25、vent)事件源:列表(JList)下拉组合框和列表均能存放多个选项,但:JComboBox 每次只能选一项,类似一组单选按钮,JList 允许多选,类似一组复选框。,【例16-7】编程。使用下拉组合框存放若干个班级,选择其中一个,在右边列表框中显现同学姓名。在列表框中选择姓名(可以多选),则在下面文本区中显示选择结果。中列表框和文本区各置于滚动窗格上。,class SelectFrame extends JFrame private JPanel pan1=new JPanel();private JPanel pan2=new JPanel();private JPanel pan3=ne

26、w JPanel();private JLabel label1=(请选择班别和姓名(姓名可多选):);private String classes=软件1班,软件2班,软件3班;private String names1=赵一,钱二,孙三,李四;private String names2=蒋毅,宋珥,孔散,陈斯;private String names3=张扬,龚勋,黎敏,戴杰;private JComboBox comboBox=new JComboBox(classes);private JList list=new JList(names1);private JScrollPane s

27、crollPane1=new JScrollPane(list);private JLabel label2=new JLabel(选取结果:);private JTextArea textArea=new JTextArea(4,10);private JScrollPane scrollPane2=new JScrollPane(textArea);,例7,16.5.1 JComboBox下拉组合框,下拉组合框选项有从0开始的索引(序号)。常用方法:(1)JComboBox():(2)JComboBox(Object items):以数组元素为选项的构造方法。如:String classe

28、s=软件1班,软件2班,软件3班;JComboBox comboBox=new JComboBox(classes);(3)void addItemListener(ItemListener aListener)(4)void addActionListener(ActionListener listener)(5)void addItem(Object anObject):添加选项。(6)void insertItemAt(Object anObject,int index):插入选项。,(7)Object getSelectedItem():返回被选中的选项。(8)Object getIt

29、emAt(int index)(9)int getSelectedIndex()(10)int getItemCount()(11)void removeItem(Object anObject)(12)void removeItemAt(int anIndex)(13)void removeAllItems()(14)void setEditable(boolean aFlag):设置是否可编辑。下拉组合框使用最多的事件是选项事件和动作事件。,16.5.2 JList列表框,列表框允许多选。与一组复选框的功能相比,它简洁实用。JList常用方法有:(1)JList()(2)JList(Obj

30、ect listData):以数组元素作选项构造列表框。(3)JList(Vector listData)(4)void addListSelectionListener(ListSelectionListener listener)(5)void setSelectionMode(int selectionMode):设置列表选择模式。选择模式有3种,用ListSelectionModel接口的静态常量字段表示:SINGLE_SELECTION:单选模式。SINGLE_INTERVAL_SELECTION:单间隔选择模式。MULTIPLE_INTERVAL_SELECTION:多间隔选择模式

31、(默认)。(6)int getSelectedIndex():返回选中的最小选项索引。(7)int getSelectedIndices():返回所选中的全部选项索引。(8)Object getSelectedValue():返回选中的最小选项。,(9)Object getSelectedValues():返回所有选中选项。(10)boolean isSelectionEmpty()(11)void setListData(Object listData):设置列表框选项数据为给定的数组元素。例如:JList list=new JList();list.setListData(new Stri

32、ng蒋毅,宋珥,孔散,陈斯);(12)void setFixedCellHeight(int height):设置单元显示高度。(13)void setFixedCellWidth(int width):设置单元显示宽度。(14)void setLayoutOrientation(int layoutOrientation):设置选项的布局方向。布局方向共有3种,用JList类的静态常量字段表示:VERTICAL:单列垂直方向布局(默认)。HORIZONTAL_WRAP:水平换行布局,一行可显示两个以上选项。VERTICAL_WRAP:垂直换行布局,一行也可显示两个以上选项,但先列后行。(15

33、)void setVisibleRowCount(int visibleRowCount),16.5.3 JTextArea文本区,JTextArea和JTextField都是文本组件JTextComponent。注:在文本组件JTextArea和JTextField中,改变光标位置,可引发光标事件(插入符)事件CaretEvent。JTextArea的常用方法:(1)JTextArea()(2)JTextArea(String text)(3)JTextArea(int rows,int columns)(4)void append(String str):在文本区后面追加文本。(5)voi

34、d insert(String str,int pos):在文本区指定位置插入文本。(6)void replaceRange(String str,int start,int end)(7)void setLineWrap(boolean wrap):设置文本区是否自动换行。,JTextArea 从 JTextComponent 继承的常用方法:(8)void setText(String t):设置文本组件内容。(9)String getText():返回(获取)文本。(10)void setCaretPosition(int position):设置光标(文本插入符)位置。(11)int

35、getCaretPosition():返回光标位置。(12)void selectAll():选中所有文本。文本将反白显示。(13)void select(int start,int end)(14)void copy()(15)void cut()(16)void paste(),16.5.4 JScrollPane滚动窗格与JViewport视口,JScrollPane(滚动窗格)是容器,内部自带“视口”(观察孔),当数据较多,超出了视口尺寸,滚动窗格会自动显示滚动条。视口 Jviewport:容器性质的组件类。视口的视图 View:在视口上面设置(添加)、获取和移除的组件。在滚动窗格自带

36、的视口中,可设置JList或JTextArea等视图组件。,编写代码时,把JList或JTextArea对象作为JScrollPane构造方法的参数,实现滚动观看数据,如:JList list=new JList(new String蒋毅,宋珥,孔散,陈斯);JScrollPane scrollPane1=new JScrollPane(list);JTextArea textArea=new JTextArea(4,10);JScrollPane scrollPane2=new JScrollPane(textArea);,滚动窗格类JScrollPane常用方法:(1)JScrollPan

37、e()(2)JScrollPane(Component view):构造一个显示指定组件(视图)的滚动窗格。(3)JViewport getViewport():返回滚动窗格的当前视口。(4)void setViewportView(Component view):设置视口视图。视口类JViewport常用方法:(1)JViewport()(2)void setView(Component view):设置视口视图。为null,相当于移除当前视图。(3)Component getView():返回视口视图。(4)void remove(Component child):移除视口视图。注:视口也

38、可使用add(Component comp)方法添加视图。从滚动窗格视口观看视图例:scrollPane1.getViewport().setView(list);或:scrollPane1.getViewport().add(list);,WindowEvent事件WindowListener接口,WindowListener接口 JFrame类是Window类的子类,Window型对象都能触发WindowEvent事件。当一个 JFrame窗口被激活、撤消激活、打开、关闭、图标化或撤消图标化时,就引发了窗口事件,即WindowEvent创建一个窗口事件对象。窗口使用addWindowlis

39、tener方法获得监视器,创建监视器对象的类必须实现WindowListener接口,该接口中有7个不同的方法,分别是:,public void windowDeiconified(WindowEvent e)当窗口撤消图标化时,窗口的监视器调用该方法。public void windowOpened(WindowEvent e)当窗口打开时,窗口的监视器调用该方法。WindowEvent创建的事件对象调用getWindow()方法可以获取发生窗口事件的窗口。2WindowAdapter适配器 WindowAdapter类是实现了WindowListener接口的类.,16.6 本章小结,布局

40、是关于在容器中如何布置组件的管理器。常用的容器布局有BorderLayout、FlowLayout、GridLayout和CardLayout等,不设置布局则为null。事件处理模型包括3部分:事件源、事件监听器和事件本身。使用最多的事件是动作事件ActionEvent。事件监听器要实现事件监听接口或继承事件适配器类。由于适配器类的方法不是抽象的,因此继承适配器类的事件监听类无需重写所有方法。,JComboBox和JList分别是选项事件和列表选择事件的事件源。其中,选项事件的事件源还有单选按钮、复选框等。若JList或JTextArea等组件的数据太多,在有限的区域内不能一次性全部显示,则可

41、把它们放置在称为滚动窗格的JScrollPane容器上。该容器自带视口,当数据太多无法全部显示时,会自动出现水平和垂直滚动条。,16.7 实训16:鼠标测试,(1)编写鼠标按键测试程序。程序运行时,把鼠标移到窗框右上部灰色的面板,依次按下鼠标左键、中间滚轮键和右键,将在窗框下部带滚动窗格的文本区中显示相应的文字。,使用Timer类的构造方法:Timer(int a,Object b)创建一个计时器,其中的参数a的单位是豪秒,确定计时器每隔a 毫秒“震铃”一次,参数b是计时器的监视器。计时器发生的震铃事件是ActinEvent 类型事件。当震铃事件发生时,监视器就会监视到这个事件,监视器就回调ActionListener接口中的actionPerformed方法。,谢谢!返回目录 结束放映,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号