您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 实验9--图形用户界面编程
实验9图形用户界面编程9.1实验目的(1)掌握图形用户界面的布局设置;(2)掌握事件驱动编程的特点,如何区分事件源。(3)掌握文本框、文本域、标签、按钮等部件的操作方法。(4)掌握鼠标与键盘事件编程(低级事件)(5)了解菜单等其他图形部件的使用9.2知识要点9.2.1awt包简介(1)java.awt包可用于编写JavaApplication和Applet的图形界面。(2)AWT组件层次关系见图9-1,所有的GUI标准组件都是AWT包中的根类Component(构件)类的子类。9.2.2容器、布局和部件(1)容器Container是Component的子类,具有构件的所有性质,并且能放置其他容器和构件。一个容器能容纳若干构件;调用容器对象的add方法将构件加入到容器中;窗体(Window)容器在不同的操作平台上显示不同的外观。面板(Panel)容器是没有标题和边框的透明容器,不能单独存在,必须加入窗体等其他容器中使用。(2)各类GUI部件的特点按钮(Button):单击产生ActionEvent事件复选框(Checkbox):选择时产生ItemEvent事件复选框组(CheckboxGroup):只能选一,单选;下拉列表(Choice):只能选1项;列表(List):可以选多项;文本框(TextField):只能显示一行,按回车触发ActionEvent;文本域(TextArea):显示多行文本。画布(Canvas):只能绘图,处理鼠标和键盘事件。窗体(Frame):顶级容器,关闭时触发WindowEvent;面板(Panel):可进行嵌套布局的容器,面板作为一个部件加入到窗体容器中,面板作为容器又可以放其他面板和部件。对话框(Dialog):包括模式和非模式两类,依赖其他窗体。文件对话框(FileDialog):用于打开和关闭文件。菜单(Menu)、菜单条(MenuBar)和菜单项(MenuItem):只能对Frame创建菜单,菜单条中添加菜单,菜单中可以添加菜单项或子菜单。(3)布局Java通过布局管理器对所有构件进行管理,以支持跨平台的动态布局效果。常见布局管理器有5种,见表9-1所示。表9-1常见布局管理器及特点布局特点FlowLayout布局组件按照加入的先后顺序从左到右排放,放不下再换至下一行,部件大小不变,是Applet和Panel的默认布局。BorderLayout布局将容器分为东(East)、南(South)、西(West)、北(North)、中(Center)五个区域,加入组件用命令:add(方位名字符串,组件)。是Frame、Dialog的默认布局。GridLayout布局将容器空间分为若干行乘若干列的网格区域,组件按从左向右,从上到下的次序被加到各单元格中,组件的大小将调整为与单元格大小相同。CardLayout布局将组件叠成卡片的形式,每个组件占用一块卡片,通过卡片的翻动选择要显示的组件。GridBagLayout布局在GridLayout的基础上发展而来,将整个容器分成若干行、列组成的单元,但各行可以有不同的高度,每栏也可以有不同的宽度,一个部件可以占用一个、也可以占用多个单元格。9.2.3事件处理(1)事件处理机制涉及对象有事件源、事件、事件处理者(监听者)。事件源是发生事件的对象;事件对象是提供事件相关信息的对象;事件处理者则是消化事件,完成特定处理的对象。Java采用委托(授权)事件处理机制;事件源对其可能发生的事件分别授权不同的事件处理者处理;通过如下命令注册监听者:addXXXListener(XXXListenera);其中,XXX与相应事件类型相关,例如:按钮点击动作事件对应标记为“Action”.要注销监听者使用removeXXXListener(XXXListenera);事件处理者必须实现某类事件相对应的接口,只有符合接口规范的对象才能作为事件处理者,通过编写相应方法实现事件的处理。例如,ActionListener接口中定义了如下方法用来处理事件。publicvoidactionPerformed(ActionEvente);Java为每类事件提供了一个相应的接口。(2)事件与事件处理java.util.EventObject是所有事件类的父类;java.awt.AWTEvent是所有AWT事件类的父类,其包括低级事件和基于语义的高级事件。XXXEvent对应的事件处理接口通常为XXXListener,但鼠标事件(MouseEvent)对应的事件处理接口有两个,一个是MouseListener,另一个是MouseMotionListener,它们分别用来处理鼠标的移动(含拖动)与鼠标的点击动作。各类接口的事件处理方法见表9-2。表9-2AWT事件接口及处理方法描述信息接口名称方法(事件)点击按钮、点击菜单项、文本框按回车等动作ActionListeneractionPerformed(ActionEvent)选择了可选项的项目ItemListeneritemStateChanged(ItemEvent)文本部件内容改变TextListenertextValueChanged(TextEvent)移动了滚动条等组件AdjustmentListeneradjustmentVlaueChanged(AdjustmentEvent)鼠标移动MouseMotionListenermouseDragged(MouseEvent)mouseMoved(MouseEvent)鼠标点击等MouseListenermousePressed(MouseEvent)mouseReleased(MouseEvent)mouseEntered(MouseEvent)mouseExited(MouseEvent)mouseClicked(MouseEvent)键盘输入KeyListenerkeyPressed(KeyEvent)keyReleased(KeyEvent)keyTyped(KeyEvent)组件收到或失去焦点FocusListenerfocusGained(FocusEvent)focusLost(FocusEvent)组件移动、缩放、显示/隐藏等ComponentListenercomponentMoved(ComponentEvent)componentHidden(ComponentEvent)componentResized(ComponentEvent)componentShown(ComponentEvent)窗口事件WindowListenerwindowClosing(WindowEvent)windowOpened(WindowEvent)windowIconified(WindowEvent)windowDeiconified(WindowEvent)windowClosed(WindowEvent)windowActivated(WindowEvent)windowDeactivated(WindowEvent)容器增加/删除组件ContainerListenercomponentAdded(ContainerEvent)componentRemoved(ContainerEvent)事件适配器Java中为那些具有多个方法的监听者接口提供了事件适配器类,这个类通常命名为XxxAdapter,在该类中以空方法体实现了相应接口的所有方法,程序员设计可通过继承适配器类来编写监听者类,在类中只需给出关心的方法,从而减轻工作量。在事件处理代码中区分事件源在事件处理代码中可通过相应的方法得到事件源对象或与事件源相关的信息,见表9-3,通过这些信息可区分事件源。表9-3在事件处理代码中区分事件源事件类型方法作用ActionEventgetSource()返回事件对象对应的事件源对象getActionCommand()返回动作命令字符串WindowEventgetWindow()返回窗体事件对应的窗体对象ItemEventgetItemSelectable()返回选择事件对应的事件源对象KeyEventgetKeyChar()返回键盘事件按键对应的字符getKeyCode()返回键盘事件所按键的编码值9.3样例程序样例1:在应用程序窗体中安排1个文本框,一个标签。在文本框输入一个数字(0-9),按回车键,在标签处显示对应的英文单词。0---zero,1---one,....【参考程序】importjava.awt.*;importjava.awt.event.*;publicclassmyFrameextendsFrameimplementsActionListener{Labelres;TextFieldmy;Stringword[]={zero,one,two,three,four,five,six,seven,eight,nine,ten};publicmyFrame(){my=newTextField(20);res=newLabel(英文单词);setLayout(newFlowLayout());add(my);add(res);my.addActionListener(this);}publicvoidactionPerformed(ActionEvente){Strings=my.getText();intn=Integer.parseInt(s);res.setText(word[n]);}publicstaticvoidmain(Stringargs[]){Framemy=newmyFrame();my.setSize(300,300);my.setVisible(true);}}【编程技巧】(1)从数组中单词与下标位置之间的对应关系认识翻译目标。(2)事件注册处理过程。(3)如何读取文本框数据并转化为整数和设置标签内容。【自己练习】以上程序执行时要求用户输入一个0到9之间的数字,但由于没有提示,用户可能输入数据错误,从而产生程序运行错误,改进应用界面,给用户输入提示。样例2:在应用程序窗体中安排两个文本框分别用来输入两个整数,两个按钮分别为“+”,“*”,一个结果标签。点击按纽“+”将两文本框的数据做加法运算;点击按钮“*”做乘法运算,将结果显示在标签中。【参考程序】importjava.awt.*;importjava.awt.event.*;publicclassmyFrameextendsFrameimplementsActionListener{Labelres;TextFieldf1,f2;publicmyFrame(){f1=newTextField(20);f2=newTextField(20);Buttonb1=newButton(+);Buttonb2=newButton(*);res=newLabel(运算结果);setLayout(newGridLayout(3,2));add(f1);add(f2);add(b1);add(b2);add(res);b1.addActionListener(this);b2.addActionListener(this);}publicvoidactionPerformed(ActionEvente){intx1=Integer.parseInt(f1.getText());intx2=Integer.parseInt(f2.getText());if(e.getActionCommand().equals(+))//区分用户点击的是哪个按钮res.setText(+(x1+x2));elseres.setText(+(x1*x2));}publicstaticvoidmain(Stringargs[]){Framemy=newmyFrame();my.setSize(200,200);my.setVisible(true);}}【说明】本例
本文标题:实验9--图形用户界面编程
链接地址:https://www.777doc.com/doc-7337982 .html