图形用户界面的设计与实现.ppt

上传人:za****8 文档编号:13208011 上传时间:2020-06-08 格式:PPT 页数:75 大小:729.01KB
返回 下载 相关 举报
图形用户界面的设计与实现.ppt_第1页
第1页 / 共75页
图形用户界面的设计与实现.ppt_第2页
第2页 / 共75页
图形用户界面的设计与实现.ppt_第3页
第3页 / 共75页
点击查看更多>>
资源描述
2020/6/8,1,第七章图形用户界面的设计与实现,重点掌握:Java的事件处理,2020/6/8,2,第七章图形用户界面的设计与实现,用AWT生成图形化用户界面AWT事件处理模型AWT组件库,2020/6/8,3,7.1用AWT生成图形化用户界面,7.1.1AWT与Swing1、AWT抽象窗口工具包AWT(AbstractWindowToolkit)API为Java程序提供的建立图形用户界面GUI(GraphicsUserInterface)工具集.可用于applet和applications中。2、Swing,2020/6/8,4,AWT和Swing支持图形用户界面编程的功能:用户界面组件;布局管理器;图形和图像工具,包括形状、颜色和字体类;事件处理模型;,2020/6/8,5,7.1.2java.awt包,java.awt包提供了基本的java程序的GUI设计工具。主要包括下述三个概念:组件-Component容器Container布局管理器-LayoutManager,2020/6/8,6,2020/6/8,7,7.1.3组件和容器,组件-Java的图形用户界面的最基本组成部分组件是一个可以以图形化的方式显示在屏幕上并能与用户进行交互的对象例如一个按钮,一个标签等。注意:组件不能独立地显示出来,必须将组件放在一定的容器中才可以显示出来。,2020/6/8,8,7.1.4常用容器,容器java.awt.Container是Component的子类一个容器可以容纳多个组件可以通过add()方法向容器中添加组件常用容器:Panel,Frame,Applet,2020/6/8,9,1、Frame例:程序FirstFrame.java注意:不能直接将按钮,菜单等图形用户界面元素加入到框架中;若加入界面元素,需要在面板组件中进行绘制,然后将该面板组件加入到框架的内容窗格(ContentPane)中;通过框架的getContentPane()方法获得内容窗格。,2020/6/8,10,2、Panel例:在程序FirstFrame.java中加入面板见程序:FrameAddPanel.java,2020/6/8,11,7.1.5LayoutManager布局管理器,排列顺序组件的大小、位置当窗口移动或调整大小后组件如何变化等功能授权给对应的容器布局管理器来管理不同的布局管理器使用不同算法和策略,容器可以通过选择不同的布局管理器来决定布局。,2020/6/8,12,FlowLayoutPanel,Applet的缺省布局管理器。放置规律:从上到下、从左到右进行放置:如果容器足够宽,第一个组件先添加到容器中第一行的最左边,后续的组件依次添加到上一个组件的右边;如果当前行已放置不下该组件,则放置到下一行的最左边。,2020/6/8,13,构造方法(教材P241):FlowLayout(align,inthgap,intvgap);FlowLayout(align);FlowLayout();居中对齐,间隔5个象素例:程序FlowLay.java,2020/6/8,14,2.BorderLayout是JApplet,Frame和Dialog的缺省布局管理器。把容器分成5个区域:North,South,East,West和Center,每个区域只能放置一个组件。,2020/6/8,15,构造函数:BorderLayout():水平及垂直间隔为0BorderLayout(inthgap,intvgap)hgap:水平间隔vgap:垂直间隔例:程序BorderLay.java,2020/6/8,16,3.GridLayout使容器中各个组件呈网格状布局,平均占据容器的空间构造函数:GridLayout();一行一列GridLayout(introws,intcols);GridLayout(introws,intcols,inthgap,intvgap);hgap:水平间隔vgap:垂直间隔例:程序GridLay.java,2020/6/8,17,7.2AWT事件处理模型,主要涉及三类对象:Event-事件,用户对界面操作在java语言上的描述,以类的形式出现,例如键盘操作对应的事件类是KeyEvent。EventSource-事件源,事件发生的场所,通常就是各个组件,例如按钮Button。Eventhandler-事件处理者,接收事件对象并对其进行处理的对象。例:程序ButtonClick.java,2020/6/8,18,7.2.1AWT事件层次结构图,AWT事件类的继承关系图,2020/6/8,19,7.2.2键盘事件,KeyListener接口中有三个方法:按下键时调用(只处理原始的按键)publicvoidkeyPressed(KeyEvente)松开键时调用(只处理原始的按键)publicvoidkeyReleased(KeyEvente)按下并松开键时调用(处理由于按键所产生的一系列字符)publicvoidkeyTyped(KeyEvente)例:程序KeyClick.java,2020/6/8,20,7.2.3鼠标事件,MouseListener接口:mousePressed(MouseEvent,e):鼠标键被按下时调用;mouseReleased(MouseEvent,e):鼠标键被释放时调用;mouseClicked(MouseEvent,e):合并上述两事件为一次鼠标点击事件。mouseEntered(MouseEvent,e):鼠标进入组件时调用;mouseEixt(MouseEvent,e):鼠标离开组件时调用;,2020/6/8,21,getX和getY方法:能够得到鼠标点击时的鼠标指针的x和y坐标。getClickCount方法,可以区别是单击操作,还是双击操作。getPoint方法,返回发生鼠标事件的坐标。,常用方法:,2020/6/8,22,MouseMotionListener接口:mouseDragged:鼠标移动;mouseMoved:用户拖动鼠标。例:程序MouseDraw.java(画笔),2020/6/8,23,7.3Swing组件,7.3.1Swing组件的类继承关系,2020/6/8,24,7.3.2文本组件,Java提供的文本组件:用于单行文本输入的文本框(JTextField);用于多行输入的文本域(JTextArea)。构造方法及常用成员方法:教材P237,2020/6/8,25,7.3.2文本组件,事件处理:JTextField类引发ActionEvent事件。在文本框中按回车键时引发。监听者对象所属的类必须实现ActionListener接口响应事件。接口的成员方法:actionPerformed(ActionEvente);,2020/6/8,26,JTextArea类引发DocumentEvent事件UndoableEditEvent事件DocumentEvent事件对文本作增、删、改等操作时引发。监听者对象所属的类必须实现DocumentListener接口以响应事件。接口的成员方法:changedUpdata(DocumentEvente)修改文本;insetUpdate(DocumentEvente)增加文本;removeUpdate(DocumentEvente)删除文本;,2020/6/8,27,UndoableEditEvent事件在文本区域上撤消所做的增、删、改时引发。监听者对象所属的类必须实现UndoableEditListener接口以响应事件。接口的成员方法:UndoableEditHappened(UndoableEditEvent,e),2020/6/8,28,例:程序TextFieldTest.java。获取两个文本框的输入并求和,然后显示在第三个文本域中。运行结果如下:,初始状态,改变输入,2020/6/8,29,在一个文本域里,用户可以输入多行文本,多行文本之间的换行可以采用三种方式:1)手动换行。即输入ENTER键,这将在文本中插入换行符“n”。2)通过设置换行属性来避免手动换行,由文本区组件自动处理。textArea.setLineWrap(true);但是这样的设置并没有真正在文本中插入换行符“n”。,文本域组件TextArea,2020/6/8,30,3)给文本区增加滚动条,这可以通过把文本区插入到一个滚动窗格中来实现。这也是给其他组件添加滚动条的方法。JScrollPanescrollPane=newJScrollPane(textArea);,2020/6/8,31,例:文本域的三种显示方式程序TextAreaTest.java。运行结果如下:,2020/6/8,32,密码域JPassworkField特殊的文本域,在密码域中输入时,显示回显符,如“*”例:程序PasswordFieldTest.java。将密码域的输入显示在文本域中运行结果如下:,2020/6/8,33,7.3.3标签P223,JLablelabel=newJLabel(“NoWrapArea”,JLabel.LEFT);建立一个标签对象,其显示的文本是“NoWrapArea”,对齐方式为左对齐。,2020/6/8,34,7.3.4按钮P225,JButtonloginButton=newJButton(登录,newImageIcon(login.gif);,2020/6/8,35,当希望按钮对单击动作有所反应时,要为按钮注册一个事件监听器,并且实现这个事件监听器,就可以完成所需要的按钮功能。/注册事件监听器loginButton.addActionListener(newLoginAction();/实现事件监听器privateclassLoginActionimplementsActionListener,2020/6/8,36,例:程序Login.java:密码验证示例当用户输入密码后(正确密码为password),按下“登录”按钮,然后我们将密码输入是否正确的结果显示在文本域中。运行结果如下:,2020/6/8,37,7.3.5Swing常用的选择类组件,单选按钮组件P228是一组互斥按钮,一次只能选择其中的一个选项,选项的选取只需要单击即可。ButtonGroupgroup=newButtonGroup();JRadioButtonbutton1=newJRadioButton(“EAST”,true);.JRadioButtonbutton4=newJRadioButton(“NORTH”,false);,2020/6/8,38,例:程序RadioButtonExample.java运行结果如下:,2020/6/8,39,复选框组件P228多重选择,即能够选择其中的多个选项,如果要取消或选取某选项,可以单击此选项。允许用户选择多个选项。通过单击复选框来选取该选项,再单击一下,则取消选取。,2020/6/8,40,通过isSelected方法进行状态判断。/新建复选框。boldCheck=newJCheckBox(“Bold”);/新建复选框。italicCheck=newJCheckBox(“Italic”);/判断“mathCheck”复选框是否被选定。boldCheck.isSelected();,2020/6/8,41,例:程序CheckBoxExample.java复选框组件示例:选择字体风格。运行结果如下:,2020/6/8,42,列表框组件JListP234允许用户从一个列表中选择一个或多个条目。建立列表框前,需要指定所显示的列表条目:Stringcourses=“Math”,“English”,“Physics”,“Chemic”,“Biology”,“Politics”;JListcourseList=newJList(courses);可以设置列表中显示的行数,同时使用滚动条:courseList.setVisibleRowCount(4);JScrollPanelistScrollPane=newJScrollPane(courseList);,2020/6/8,43,选择列表框中的多个条目有两种方式:连续条目选择:选择第一个条目后,按住Shift键,再选择需要的最后一个条目。间断条目选择:按住Ctrl键,选择需要的条目。,2020/6/8,44,用户选择列表框条目时,列表框产生选择事件。将列表选择监听器ListSelectionListener添加给列表组件,并在该监听器中实现valueChanged方法:courseList.addListSelectionListener(newcourseListener();.privateclasscourseListenerimplementsListSelectionListenerpublicvoidvalueChanged(ListSelectionEventevent).,2020/6/8,45,获得用户所选择的列表框条目以及条目所在的索引号需要使用:getSelectedValues方法getSelectedIndices方法:ObjectselectedCourses=courseList.getSelectedValues();intselectedIndexCourses=courseList.getSelectedIndices();返回类型是系统设定的,2020/6/8,46,例:程序代码见ListExample.java在给定的科目中选择多门课程。运行结果如下:,2020/6/8,47,实验五:Applet应用程序时间:第12周星期四晚6:007:30,向javaapplet传递参数,按指定颜色,字体和字体大小显示一条信息.显示位置坐标x,y、要显示的信息、字体和字体大小都是标记里的参数。,2020/6/8,48,组合框组件P232组合框将编辑框和下拉列表框结合起来,使得用户可以在一组预定义的选项中选择一个条目,而且能够修改选项内容。新建一个有内容的组合框:可以象列表框那样指定数组;可以采用向组合框对象里加入条目的方法。对组合框是否能够被编辑也可以进行设置。,2020/6/8,49,/新建组合框。jobsBox=newJComboBox();jobsBox.setEditable(true);/设置组合框是否能够被编辑。jobsBox.addItem(job1);jobsBox.addItem(job2);,2020/6/8,50,组合框的内容是可以动态变化的:addItem方法能够把条目添加到列表的末尾;insertItermAt方法将把新条目添加到列表的任何位置;removeItem方法和removeItemAt方法将能够删除指定条目;removeAllItems方法将删除所有条目:jobsBox.insertItermAt(“job7”,7);/在第7个位置增加“job7”条目。jobsBox.removeItem(“job7”);/删除“job7”条目。jobsBox.removeItemAt(5);jobsBox.removeAllItems();/删除所有条目。,2020/6/8,51,当选择一个条目时,组合框就产生一个事件,对事件的监听需要添加事件监听器,并实现actionPerformed方法:/增加事件监听器。jobsBox.addActionListener(newjobsListener();.privateclassjobsListenerimplementsActionListenerpublicvoidactionPerformed(ActionEventevent).当组合框的选择事件发生时,可以通过getSelectedItem方法来获取当前被选择的条目:ObjectselectedJob=jobsBox.getSelectedItem();,2020/6/8,52,例:程序ComboBoxExample.java:应用组合框来进行选择职业。运行结果如下:,2020/6/8,53,滑块组件(补充)滑块组件一般有一个连续区间和可拖动的滑块,用户可通过拖动滑块在一个区间范围里进行选择。JSliderageSlider=newJSlider();ageSlider=newJSlider(SwingConstants.VERTICAL,0,120,20);,2020/6/8,54,当滑块被拖动时,滑块的值将发生变化,触发ChangeEvent事件。滑块组件的事件监听器要实现ChangeListener接口,实现此接口中的stateChanged方法:AgeListenermyAgeListener=newAgeListener();ageSlider.addChangeListener(myAgeListener);privateclassAgeListenerimplementsChangeListenerpublicvoidstateChanged(ChangeEventevent).滑块值发生变化时,使用getValue方法来获得滑块值:myTextField.setText(+sourceSlider.getValue();,2020/6/8,55,例:程序SliderExample.java在进行年龄输入时,使用滑块进行直观的选择。运行结果如下:,2020/6/8,56,7.3.7边界(补充),当界面中的组件比较多时,需要从视觉上将组件分隔。通用的办法是为面板设置边界,并将需要分隔的组件添加到该面板中。可选的边界风格包括:低斜面、凸斜面、蚀刻、直线、不光滑、空。,2020/6/8,57,创建边界需要调用BorderFactory类的静态方法。当需要给边界增加标题以提示时,可以使用BorderFactory的createTitledBorder方法:/初始化带标题的空边界。Borderborder=BorderFactory.createEmptyBorder();Bordertitled=BorderFactory.createTitledBorder(border,Bordertypes);当创建好需要的边界后,就可以把边界对象添加到组件中:buttonPanel.setBorder(titled);,2020/6/8,58,例:程序BorderExample.java各种边界的不同效果。运行结果如下:,2020/6/8,59,7.3.7菜单以及弹出式菜单,典型的菜单:,2020/6/8,60,2020/6/8,61,2020/6/8,62,2020/6/8,63,创建菜单四个步骤:创建菜单栏、(创建一个JMenuBar对象)创建菜单以及子菜单、(创建Jmenu对象)创建菜单项,并将菜单项加入到子菜单或菜单中,(创建JMenuItem对象)将子菜单加入到菜单中,将菜单加入到菜单栏中。,2020/6/8,64,/(a)创建菜单栏,并将菜单栏加入到框架中。JMenuBarmenuBar=newJMenuBar();/(b)创建“File”菜单、“Edit”菜单和“View”菜单。JMenufileMenu=newJMenu(File);JMenueditMenu=newJMenu(Edit);JMenuviewMenu=newJMenu(View);/(b)创建子菜单。JMenuoptionMenu=newJMenu(Option);,2020/6/8,65,/(c)通过Action对象新建“New”菜单项,并添加事件监听器。newItem=fileMenu.add(newShowAction(New);/(c)通过指定菜单项对象新建“Paste”菜单项。pasteItem=newJMenuItem(Paste,P);/(d)将菜单项加入到子菜单或菜单中,将子菜单加入到菜单中,将菜单加入到菜单栏中。fileMenu.add(newItem);editMenu.add(pasteItem);viewMenu.add(optionMenu);menuBar.add(fileMenu);menuBar.add(editMenu);menuBar.add(viewMenu);,2020/6/8,66,创建复选框和单选按钮菜单项和创建一般的菜单项几乎一样,只需要注意一下复选框和单选按钮的不同构造函数以及单选按钮组的构建:/创建单选按钮菜单项“Forward”,并将“Forward”菜单项加入到“Search”菜单中。ButtonGroupgroup=newButtonGroup();forwardItem=newJRadioButtonMenuItem(Forward);group.add(forwardItem);searchMenu.add(forwardItem);/创建复选框菜单项“ToolBar”,并加入到子菜单中。JCheckBoxMenuItemtoolItem=newJCheckBoxMenuItem(ToolBar);optionMenu.add(toolItem);,2020/6/8,67,菜单项的使用状态菜单项能够被选取取决于菜单项的启用和禁用状态:/初始设置“Save”菜单项为禁用状态。saveItem.setEnabled(false);快捷键和加速器快捷键显示为带有下划线的字母,加速器则显示为菜单项旁边的组合键。:/设置菜单的快捷键。fileMenu.setMnemonic(F);/设置“Exit”菜单项的快捷键为“T”。JMenuItemexitItem=newJMenuItem(Exit,T);/设置“Exit”菜单项的加速器为“CtrlT”。exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T,InputEvent.CTRL_MASK);,2020/6/8,68,弹出式菜单弹出式菜单的创建和菜单的创建基本相同,也需要新建一个弹出式菜单后再加入菜单项。/弹出式菜单。popup=newJPopupMenu();/新建弹出式菜单中的“Cut”菜单项和监听器。cutItemPop=newJMenuItem(Cut,C);popup.add(cutItemPop);,2020/6/8,69,例:程序MenuExample.java菜单的用法。运行结果如下:,2020/6/8,70,7.3.8对话框,对话框分为模式对话框和无模式对话框。模式对话框必须在用户处理完后才允许用户与主窗口继续进行交互。无模式对话框允许用户同时在对话框和程序剩余部分中输入信息。JAVA提供了JDialog和JOptionPane两类对话框组件。,2020/6/8,71,JOptionPane类的对话框分为四种类型:showMessageDialog:显示一条消息等待用户点击OK;showConfirmDialog:显示一条消息并等待确认;showOptionDialog:显示一条消息并等待用户在一组自定义选项中的选择;showInputDialog:显示一条消息并等待用户的输入。,2020/6/8,72,以showConfirmDialog为例:intselection=JOptionPane.showConfirmDialog(DialogFrame.this,/父窗口Areyousure?,Logout,/消息以及对话框标题JOptionPane.OK_CANCEL_OPTION,/底部按钮类型JOptionPane.WARNING_MESSAGE);/消息类型底部按钮的类型和对话框有密切的关系对于showConfirmDialog,按钮可以包括四种:DEFAULT_OPTION,YES_NO_OPTION,YES_NO_CANCEL_OPTION,OK_CANCEL_OPTION。,2020/6/8,73,例:程序代码见DialogExample.java对话框的使用:当单击“退出”按钮时,将弹出对话框,同时原先的框架窗口将不能被激活,必须选择对话框中的一个选项才能够退出对话框。运行结果如下:,2020/6/8,74,本章小结,Java的基本图形绘制、事件处理模型和常用的Swing组件。,2020/6/8,75,事件是描述发生了什么的对象:事件是由事件源产生的,事件的产生者称为事件源;事件源拥有自己的方法,我们通过它向其注册事件监听器。事件监听器是一个类的实例,这个类实现了一个特殊的接口:Listenerinterface。当事件源产生了一个事件以后,事件源就会发送通知给相应的事件监听器,监听器对象根据事件对象内封装的信息,决定如何响应这个事件。Swing提供了一整套的GUI组件,包括:布局管理器、文本组件、标签、选择类组件、边界、菜单、对话框等。,
展开阅读全文
相关资源
相关搜索

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


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

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


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