鼠标测试--布局与事.ppt_第1页
鼠标测试--布局与事.ppt_第2页
鼠标测试--布局与事.ppt_第3页
鼠标测试--布局与事.ppt_第4页
鼠标测试--布局与事.ppt_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、ridLayout和CardLayout,此外还有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.

4、SOUTH);,【例16-1】编写关于边框布局的窗框程序,在窗框中放置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(西边按钮); JButt

5、on buttonNorth = new JButton(北边按钮); JButton buttonCenter = 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.

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

7、wLayout(int align):构造指定对齐方式的流布局,默认水平和垂直间隙也是5。 (3)FlowLayout(int align, int hgap, int vgap) 对齐方式参数取自静态常量字段LEFT、CENTER(默认)或RIGHT等,引用方式如 FlowLayout.LEFT。,【例16-2】编写关于FlowLayout布局的窗框程序,在窗框中放置多个个按钮、标签和文本框。,JFrame frame = new JFrame(FlowLayout流布局); FlowLayout flowLay = new FlowLayout(); /流布局 frame.setLayou

8、t(flowLay); JButton button1 = new JButton(按钮1); JLabel lab1 = new JLabel(标签1); JTextField 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

9、.3 GridLayout网格布局,网格布局把容器等分为行、列方阵,每个格子尺寸相同。 网格布局内的所有组件的大小一致,整齐划一。 GridLayout类的构造方法有3个: (1)GridLayout() (2)GridLayout(int rows, int cols) (3)GridLayout(int rows, int cols, int hgap, int vgap):构造指定行数、列数、水平和垂直间隙的网格布局。 可使用setXxx形式的方法更改网格的行数、列数、水平和垂直间距。 需要强调的是:行、列数要求为正整数或0,但不能同时为0。当其中一个为0时,0行表示任意行,0列表示任意

10、列。,【例16-3】编写含GridLayout布局的计算器界面程序,在默认边框布局的窗框中部放置一个4行4列网格布局的面板,北部放文本框,东部放=按钮。, JFrame frame = new JFrame(“GridLayout网格布局”); JPanel pan = new JPanel(); GridLayout gridLay = new GridLayout(4,4,2,4); pan.setLayout(gridLay); JTextField field = new JTextField(); JButton btnEqual = new JButton(=); JButton

11、btn1 = new JButton(7); JButton btn16 frame.add(field, BorderLayout.NORTH); frame.add(btnEqual, BorderLayout.EAST); pan.add(btn1); pan.add(btn16); frame.add(pan, BorderLayout.CENTER); frame.setBounds(100, 200, 250, 200); frame.setDefaultCloseOperation(); frame.setVisible(true); ,例3,16.2.4 CardLayout卡

12、片布局与幻灯片播放,卡片布局的容器相当于一个盒子,里面放置多张叠放在一起的卡片(组件),执行卡片布局next等方法翻看卡片。 CardLayout类常用方法: (1)CardLayout() (2)CardLayout(int hgap, int vgap) (3)void first(Container parent) (4)void last(Container parent) (5)void next(Container parent) (6)void previous(Container parent) (7)void show(Container parent, String nam

13、e) 在卡片布局容器中放置卡片,要调用带约束参数的add方法,如: 容器对象.add(卡片组件, 卡片1); 该方法把卡片组件添加到容器中,第二个参数用来标识卡片。 卡片有了标识名称,就可以执行show方法显示。,【例16-4】编写CardLayout布局程序,在窗框中部放置一个卡片布局面板(卡片盒),内放3张卡片面板,每张卡片设背景色,并放一个标签。窗框下部安放一个面板,上面放4个按钮:“上翻”、“下翻”、“自动播放”和“暂停”。,class CardFrame extends JFrame /窗框类 CardLayout cardLay = new CardLayout(10,5); JP

14、anel panCards = new JPanel(); /卡片盒 JPanel pan1 = new JPanel(); JLabel lab1 = new JLabel(第一张卡片); JPanel panUpDown = new JPanel(); JButton btnPageUp = new JButton(上翻); MyThread thread = null; boolean stopAutoPlay;,class MyThread extends Thread /内部线程类 public void run() while(true) cardLay.next(panCards

15、); /自动播放 try Thread.sleep(500); catch(Exception ex) if (stopAutoPlay) break; /暂停播放 public CardFrame() /构造方法 this.setTitle(CardLayout卡片布局); this.setBounds(100, 200, 350, 200); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); initialize(); this.setVisible(true); ,例4,16.2.5 null(空)布局,容器还可设置为null布局,

16、表示空布局、没有布局。 “手工”布局:空布局要手工编写代码设置组件的位置和大小。 设置组件位置和大小的常用方法: (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)个方法包含了第(2)、(3)个方法的功能。,【例16-5】编写手工布局程序,把窗框布局设为空,然后在上面放置标签、文本框和按钮。, JFrame frame = new

17、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, 40, 80, 25); frame.add(label); frame.add(textField); frame.

18、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:选项事件(语义事件) TextEvent:文本事件(语义事件) 语义事件能避开细节问题,适用范围广

19、,具有跨平台性。,16.3.1 事件处理模型,(1)事件源:引发事件的对象,如按钮、菜单项和文本框等。 (2)事件监听器:也是事件的处理者,事件监听类的对象。 事件监听类要实现相应的接口XxxListener(或适配器XxxAdapter),例如动作事件监听类要实现动作监听接口ActionListener,其声明的抽象方法actionPerformed(ActionEvent e) 要在监听类中重写,方法体语句就是事件处理的步骤,方法便是事件处理方法。 一个事件源组件往往能引发多种事件,必须在事件源和事件监听器之间搭起传递消息的桥梁,才能响应事件。,(3)事件注册:事件源通过调用添加事件监听器

20、方法实现事件注册,把事件委托给监听器来处理。语法: 事件源.addXxxListener(监听器); 如: button.addActionListener(new ActionHandler(); (4)事件:是事件类的对象。如:ActionEvent、ItemEvent等。 上面4点是事件处理的4要素,其中事件源、事件监听器和事件构成了事件处理模型。,JAVA中,将事件的相关信息封装在一个事件对象中,所有的事件对象都最终派生于java.util.EventObject类,AWT事件处理机制的概要: 监听器对象是一个实现了特定监听器接口的类的实例 事件源是一个能够注册监听器对象并发送事件对象

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

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

23、rame 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.setVisibl

24、e(true); ,public void initialize() 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 mouseClic

25、ked(MouseEvent e) if(e.getButton() = 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)

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

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

28、ox = new JComboBox(classes); private JList list = new JList(names1); private JScrollPane scrollPane1 = 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

29、下拉组合框,下拉组合框选项有从0开始的索引(序号)。常用方法: (1)JComboBox(): (2)JComboBox(Object items):以数组元素为选项的构造方法。如: String classes = 软件1班, 软件2班, 软件3班; JComboBox comboBox = new JComboBox(classes); (3)void addItemListener(ItemListener aListener) (4)void addActionListener(ActionListener listener) (5)void addItem(Object anObje

30、ct):添加选项。 (6)void insertItemAt(Object anObject, int index):插入选项。,(7)Object getSelectedItem():返回被选中的选项。 (8)Object getItemAt(int index) (9)int getSelectedIndex() (10)int getItemCount() (11)void removeItem(Object anObject) (12)void removeItemAt(int anIndex) (13)void removeAllItems() (14)void setEditabl

31、e(boolean aFlag):设置是否可编辑。 下拉组合框使用最多的事件是选项事件和动作事件。,16.5.2 JList列表框,列表框允许多选。与一组复选框的功能相比,它简洁实用。 JList常用方法有: (1)JList() (2)JList(Object listData):以数组元素作选项构造列表框。 (3)JList(Vector listData) (4)void addListSelectionListener(ListSelectionListener listener) (5)void setSelectionMode(int selectionMode):设置列表选择模式

32、。 选择模式有3种,用ListSelectionModel接口的静态常量字段表示: SINGLE_SELECTION:单选模式。 SINGLE_INTERVAL_SELECTION:单间隔选择模式。 MULTIPLE_INTERVAL_SELECTION:多间隔选择模式(默认)。 (6)int getSelectedIndex():返回选中的最小选项索引。 (7)int getSelectedIndices():返回所选中的全部选项索引。 (8)Object getSelectedValue():返回选中的最小选项。,(9)Object getSelectedValues():返回所有选中选项

33、。 (10)boolean isSelectionEmpty() (11)void setListData(Object listData):设置列表框选项数据为给定的数组元素。例如: JList list = new JList(); list.setListData(new String蒋毅,宋珥,孔散,陈斯); (12)void setFixedCellHeight(int height):设置单元显示高度。 (13)void setFixedCellWidth(int width):设置单元显示宽度。 (14)void setLayoutOrientation(int layoutOr

34、ientation):设置选项的布局方向。 布局方向共有3种,用JList类的静态常量字段表示: VERTICAL:单列垂直方向布局(默认)。 HORIZONTAL_WRAP:水平换行布局,一行可显示两个以上选项。 VERTICAL_WRAP:垂直换行布局,一行也可显示两个以上选项,但先列后行。 (15)void setVisibleRowCount(int visibleRowCount),16.5.3 JTextArea文本区,JTextArea和JTextField都是文本组件JTextComponent。 注:在文本组件JTextArea和JTextField中,改变光标位置,可引发光

35、标事件(插入符)事件CaretEvent。 JTextArea的常用方法: (1)JTextArea() (2)JTextArea(String text) (3)JTextArea(int rows, int columns) (4)void append(String str):在文本区后面追加文本。 (5)void insert(String str, int pos):在文本区指定位置插入文本。 (6)void replaceRange(String str, int start, int end) (7)void setLineWrap(boolean wrap):设置文本区是否自动

36、换行。,JTextArea 从 JTextComponent 继承的常用方法: (8)void setText(String t):设置文本组件内容。 (9)String getText():返回(获取)文本。 (10)void setCaretPosition(int position):设置光标(文本插入符)位置。 (11)int getCaretPosition():返回光标位置。 (12)void selectAll():选中所有文本。文本将反白显示。 (13)void select(int start, int end) (14)void copy() (15)void cut()

37、(16)void paste(),16.5.4 JScrollPane滚动窗格与JViewport视口,JScrollPane(滚动窗格)是容器,内部自带“视口”(观察孔), 当数据较多,超出了视口尺寸,滚动窗格会自动显示滚动条。 视口 Jviewport:容器性质的组件类。 视口的视图 View:在视口上面设置(添加)、获取和移除的组件。 在滚动窗格自带的视口中,可设置JList或JTextArea等视图组件。,编写代码时,把JList或JTextArea对象作为JScrollPane构造方法的参数,实现滚动观看数据,如: JList list = new JList( new String

38、蒋毅,宋珥,孔散,陈斯 ); JScrollPane scrollPane1 = new JScrollPane(list); JTextArea textArea = new JTextArea(4, 10); JScrollPane scrollPane2 = new JScrollPane(textArea);,滚动窗格类JScrollPane常用方法: (1)JScrollPane() (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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论